従来の動作は以下の通り。
これを以下のように改造する。
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; に設定すれば、 表示は寂しくなるが解決するはず。