サマリ | get_existpages() の高速化 |
---|---|
リビジョン | 1.2 |
対応バージョン | 1.4.x |
作者 | revulo |
ライセンス | GPLv2 |
PukiWiki には全ページ名のリストを得る get_existpages() という関数がありますが、 結構重い処理なので、キャッシュを活用することを考えてみます。
うまくいけば、get_existpages() を利用するプラグイン全般が高速化されるはずです。
キャッシュ更新のタイミングを調べるために、
wiki ディレクトリの更新日時を利用しているので、
ファイルシステムによっては正常に動作しません。
ext3 や NTFS なら大丈夫だが、FAT32 だと恐らくダメ。
という制限がバージョン 0.2 まではありましたが、
現バージョンではその制限は取り除いてあります。
アーカイブファイルをダウンロードし、 PukiWiki をインストールしてあるディレクトリで展開します。
$ tar xvfz pagename_cache-1.2.tar.gz
PukiWiki 本体にパッチをあてます。
$ patch -p0 < pukiwiki-1.4.7_pagename_cache.diff
パッチがうまくあたらない場合は、手作業で以下のような修正を加えて下さい。
pagename_cache.php の先頭部分で以下の値を設定することで、動作をカスタマイズできます。
以下のようなコードを実行し、 get_existpages() を 1000 回呼び出した時の所要時間を計ってみました。
$time1 = getmicrotime(); for ($i = 0; $i < 1000; $i++) { unset($pages); $pages = get_existpages(); } $time2 = getmicrotime(); echo $time2 - $time1;
実験を行った環境は以下の通りです。
測定の結果は以下のようになりました。 (この結果はバージョン 1.1 のもので、バージョン 1.2 だともう少し速いはずです。)
ページ数 | 改良前 [s] | 改良後 [s] |
100 | 1.861 2.039 2.027 | 0.273 0.288 0.287 |
1000 | 19.552 19.698 19.824 | 2.379 2.242 2.218 |
10000 | 200.227 200.874 200.723 | 24.436 24.607 24.850 |
ページ数によらず約8倍の高速化になっています。 ただし VMware 上での測定結果なので、数字はあくまでも参考値として見て下さい。
バージョン 0.2 以前の方法にも捨てがたいものがありますので、バージョン 0.2 のファイルも置いておきます。