* ls2 プラグインで、常にget_source() を呼んでいる [#ra61a302] - ページ: [[BugTrack2]] - 投稿者: 名無しさん - 優先順位: 普通 - 状態: 提案 - カテゴリー: プラグイン - 投稿日: 2007-10-24 (水) 00:53:20 - バージョン: ** メッセージ [#oec27970] ls2 プラグインには、ページの内容をスキャンする必要のある、title とinclude のオプションがあります。 しかし、これらのオプションを使わない時にもget_source() を呼んでいるため、無駄が多くなっています。&br;この無駄を省くことで、上のオプションを使わない時の速度をls プラグインと同等に なるようにしましょう。 [[cvs:plugin/ls2.inc.php]] (1.25) をベースに function plugin_ls2_get_headings($page, & $params, $level, $include = FALSE) { (中略) $ret .= '<a id="list_' . $params["page_$page"] . '" href="' . $href . '" title="' . $title . '">' . $s_page . '</a>'; array_push($params['result'], $ret); - $anchor = PLUGIN_LS2_ANCHOR_ORIGIN; - $matches = array(); - foreach (get_source($page) as $line) { - if ($params['title'] && preg_match('/^(\*{1,3})/', $line, $matches)) { - $id = make_heading($line); - $level = strlen($matches[1]); - $id = PLUGIN_LS2_ANCHOR_PREFIX . $anchor++; - plugin_ls2_list_push($params, $level + strlen($level)); - array_push($params['result'], - '<li><a href="' . $href . $id . '">' . $line . '</a>'); - } else if ($params['include'] && - preg_match('/^#include\((.+)\)/', $line, $matches) && - is_page($matches[1])) - { - plugin_ls2_get_headings($matches[1], $params, $level + 1, TRUE); - } - } + if ($params['title'] || $params['include']) { + $anchor = PLUGIN_LS2_ANCHOR_ORIGIN; + $matches = array(); + foreach (get_source($page) as $line) { + if ($params['title'] && preg_match('/^(\*{1,3})/', $line, $matches)) { + make_heading($line); + $level = strlen($matches[1]); + $id = PLUGIN_LS2_ANCHOR_PREFIX . $anchor++; + plugin_ls2_list_push($params, $level + 1); + array_push($params['result'], + '<li><a href="' . $href . $id . '">' . $line . '</a>'); + } else if ($params['include'] && + preg_match('/^#include\((.+)\)/', $line, $matches) && + is_page($matches[1])) + { + plugin_ls2_get_headings($matches[1], $params, $level + 1, TRUE); + } + } + } } -------- - パッチをありがとうございます。そのままイケルと思ったものの、patchコマンドに怒られたのは秘密です。titleとincludeを同時に指定した時の挙動が無くなってしまうように見えますので、勘違いでなければご一考を :) -- [[henoheno]] &new{2007-10-25 (木) 23:37:23}; -- 勘違いじゃないです、おもいっきり考慮から抜けてました。&br;メッセージの案を、素直にif で括るだけ、に変えました。 -- &new{2007-10-26 (金) 00:09:31}; - 修正案を少しいじる。 -- &new{2007-10-26 (金) 02:14:29}; -- 同時指定の時のことが抜け落ちていた件 -- &new{2007-10-26 (金) 00:09:31}; -- $level + strlen($level) の部分、$level には1~3 が入っているので、ここの結果は2~4 になるはず、なので微修正。include したページがinclude していた場合の動作も変わらないはず([[今の動作テスト>test1.4:ls2-test]])。 -- &new{2007-10-26 (金) 02:14:29}; --make_heading($line) を呼び出すだけで、$line に修正がかかる((参照渡ししているから)) & $id には固定anchor がなくてもいいような処理をすぐ後でしている、ので微修正((make_heading() の返り値を$id に入れて無いだけですけど))。 -- &new{2007-10-26 (金) 02:14:29}; #comment -------- - その他、ls2はデータ構造(気になるのは $params["page_$page"])を見直したり、全体の流れに沿って直す等、色々余地がありそうですね。 -- [[henoheno]] &new{2007-10-25 (木) 23:46:47}; -- ls.inc.php とまとめて見直さないと片付かない気配。 -- [[henoheno]] &new{2007-10-27 (土) 19:24:01}; -- [[cvs:lib/file.php]] (1.90) -- file_head() --- [[cvs:lib/file.php]] (1.91) を入れるとページの更新ができなくなりました。 -- [[hirokasa]] &new{2007-10-28 (日) 13:39:25}; -- [[cvs:plugin/ls.inc.php]] (1.10-1.11) -- 恐らくls2とコードをマージする位までやらないと、終わったとは言えない (今までの「コード発散スタイル」への反省にならない) -- [[cvs:plugin/ls2.inc.php]] (1.26-1.28) -- まだこれから --- ls2 プラグインは、2005年には更新がなかったはずなんですが。見間違いかな?([[BugTrack2/61]] ネタ) -- &new{2007-10-28 (日) 00:17:21}; --- 失敬! [[cvs:plugin/ls2.inc.php]] (1.29) -- [[henoheno]] &new{2007-10-28 (日) 01:17:39}; #comment