従来の動作は以下の通り。
これを以下のように改造する。
lib/file.php の page_write() に以下のコードを追加。
// Create and write converted html global $foot_explain, $note_hr; ksort($foot_explain, SORT_NUMERIC); $body = convert_html($postdata); $notes = ! empty($foot_explain) ? $note_hr . join("\n", $foot_explain) : ''; file_write(CACHE_DIR, $page, $body, $notimestamp); file_write(CACHE_DIR . 'notes', $page, $notes, $notimestamp);
lib/file.php の page_write() に以下の関数を追加。
function get_converted_html($page = NULL, $lock = TRUE) { $body = ''; if (is_page($page)) { $path = CACHE_DIR . encode($page) . '.txt'; if ($lock) { $fp = @fopen($path, 'r'); if ($fp == FALSE) return $body; flock($fp, LOCK_SH); } $body = file_get_contents($path); if ($lock) { flock($fp, LOCK_UN); @fclose($fp); } } return $body; } function get_notes($page = NULL, $lock = TRUE) { $array = array(); if (is_page($page)) { $path = CACHE_DIR . 'notes' . encode($page) . '.txt'; if ($lock) { $fp = @fopen($path, 'r'); if ($fp == FALSE) return $array; flock($fp, LOCK_SH); } $array = file($path); if ($lock) { flock($fp, LOCK_UN); @fclose($fp); } } return $array; }
lib/pukiwiki.php を以下のように変更。
123c123,125 < $body = convert_html(get_source($base)); --- > // $body = convert_html(get_source($base)); > $body = get_converted_html($base); > $foot_explain = get_notes($base);
最初、$body だけ保存するようにしたら、脚注が表示されなくなった。 convert_html() の中で脚注を作成していたので、 脚注部分も別ファイルとして保存するようにした。
整形ルールのページを表示するのに掛かった時間を以下に示す。
HTML convert time | |
改造前 | 0.320 sec |
改造後 | 0.024 sec |
このように HTML convert time はほぼゼロになる。 他の部分の処理もあるので表示にはそれなりに時間がかかるが、 逆にいえば、改良前の HTML convert time 分くらいは高速化される。 CPU が非力なマシンの場合や、 1ページにコンテンツを詰め込んでいる場合には、 効果を発揮するだろう。
整形ルールのページのファイルサイズを以下に示す。
ファイル名 | ファイルサイズ |
wiki/C0B0B7C1A5EBA1BCA5EB.txt | 28217 バイト |
cache/C0B0B7C1A5EBA1BCA5EB.txt | 50394 バイト |
cache/notesC0B0B7C1A5EBA1BCA5EB.txt | 855 バイト |
大雑把に言って、2〜3倍くらいのディスク容量が必要になる。
保存された html 中に、動的に変化するはずの部分が若干ある。
他の Wiki ページへのリンクは、以下のような html に変換される。
<a href="http://www.revulo.com/PukiWiki.html" title="PukiWiki (279d)">PukiWiki</a>
この (279d) という表示は、 リンク先のページが更新されてもそのままになってしまう。
MenuBar やスキンに埋め込んでしまえるものは、 そちらに移動させればよいが、簡単には対応できない。
バックアップから戻した時とか、 そういう wiki/*.txt が書き変わる場合にも、 cache/*.html の更新を行う必要がある。
cache/*.html に書き込む際に、 一時的に $show_passage = 0; に設定すれば、 表示は寂しくなるが解決するはず。