2009年12月19日土曜日

pukiwikiのキャッシュ機能追加と、文字コードまわりの修正



pukiwiki 1.4.7_notb向けにパッチを書いたので公開。


このパッチはニコニコ技術部Wiki用に作ったものです。


インストール


以下のファイルをlibにコピーすればOKっす。


http://syunei.dip.jp/~akira/pukiwiki_diff2.tar.gz (バグを修正してバージョンがあがっています。)


それ以外のファイル(pukiwiki本体)は本家よりDLできます。(http://pukiwiki.sourceforge.jp/)





キャッシュ機能追加


これはpukiwikiの表示速度・CPU負荷改善のための機能です。file.php及びpukiwiki.phpで処理しています。


wikiでは入力されたwikiデータをそのまま保持し、表示する際に毎回wiki文法のファイルをHTMLに変換して出力しています。このため、表示の際に大きな負荷がかかり、処理速度が遅くなります。


この機能を用いると、wiki文法のデータが入力された時点でHTMLを生成しキャッシュとして取っておきます。表示の時は単にそのキャッシュの内容を出力します。


このためこの機能には副作用があります。具体的にはカレンダー機能、recent、include、pcomment機能等、時刻によって表示が変わったり、他のページの内容を取り込むものとは一緒につかえません。


キャッシュを有効にするには、wiki入力の際に先頭に「//cache」と書いた行を追加してください。


(厳密には最初の100byte以内で、行頭に記述されていれば2行目以降の行頭でもOKです)


堅牢性の向上


file.phpで処理しています。


本家のpukiwikiではwikiファイルを保存する際、単純に上書きしています。そのため、ハードディスクが満杯の場合や、メモリ不足の際にファイルの内容が消えてしまう可能性があります。


それを防ぐために、まずテンポラリファイルに書き出してから、エラーがなければデータファイルにmoveをかけるように改良しています。対象となっているデータはwikiデータ本体とrecentデータぐらいで、バックアップデータ等まではまだ対応していません。


今後暇見て対応します。


入力文字コード変換等の処理改善


対象ファイルはinit.phpです。


今までバリデーションしてから文字コード変換したり、文字コード変換してからバリデーションしたり等の処理手順の不統一があったものを、統一しました。これにより文字コード変換等にともなうバリデーション漏れ発生等の確率を低減しています。


具体的には以下の順番になるように処理手順を統一しています。




  1. 文字コード変換

  2. \0文字を取り除くといったサニタイズ処理

  3. 有効な文字列でなければ、エラーを出すバリデーション処理





0 件のコメント:

コメントを投稿