Wiki はまぁ(ユーザからの視点において)シンプルな方が良いと思うのだが、やっぱサイドバーは出せてもいいかな。先日実装したIPC共有メモリを用いた直近のアクセスログ管理を使ってトップランキングも常にチェックできるようにしたいし。
レイアウトは tDiary のテーマにまかせる。 現在の blue-feather はサイドバー対応していないようなので、Nana 氏の flower に変更。 Wiki用に若干幅、配色等を修正。
で、WiKicker のフッタファイルに <div class="sidebar">...</div> を作ってそこに Google の検索フォーム等を移動。
IPC共有メモリに置いてあるアクセスログを使って直近300アクセスによるランキングをサイドバーに表示できるようにする。
アクセスログは刻々と更新されるのでトップランキングもできるだけ更新表示させたいのだが、一方各WikiPageはレスポンス向上・負荷軽減のためできるだけ 304 を返したい。
なのでページ中の更新表示させたいトップランキングの部分を、JavaScriptファイルとして別ファイルに生成しておくことにした(いわゆる JavaScript Include)。 HTML出力自体に変更がなくて304を返しても、アクセスログの変更に合わせてJavaScriptファイルだけ更新しておけばクライアント側で表示を更新してくれる。
JavaScript はできるだけ避ける方針できているが、アクセスランキングは付加的情報なのでJavaScript off によって表示されなくてもそれほど問題ないと判断。 document.write だけだから互換性の問題もほとんどないだろうし。
JavaScriptファイルの更新は、RecentLogへアクセスがあった時についでに生成するという形で行うようにしてみた。 一応 cron で1時間毎に
wget --quiet -O - http://www.naney.org/wiki/RecentLog.html > /dev/null
して、最低でも1時間に1回は更新されるようにしておく。
WiKicker のメモリ消費量を抑えるためにメモリリークチェック用モジュールをいくつか試してみる。
結局うまく使えそうなのは、Devel::Cycle ぐらいかな。 循環参照を発見した場合の表示は見やすい。 WiKicker の何か所かでチェックしてみたけど、今のところ見つからず。
リンゴを食べていたら歯につまったので、取って(当然)食った。
すぐだったしとれた断片もまだリンゴそのままだったのだが、これは既に歯クソなのか? まだリンゴなのか? もしまだこれがリンゴと呼べるのなら、ではいつから歯クソと呼ばれるのか?
Devel::Size、Devel::Cycle を埋め込むもののメモリを喰ってそうなところがなかなか見つからず。
デバッグ用コードを書いたり消したりも面倒なので、ビルド時に WIKICKER_DEBUG=1 を指定しておいた時だけ、ExtUtils::MakeMaker の PM_FILTER を使ってソース中の、
#IFDEBUG: <デバッグコード>
が有効になるようにしておく。
でメモリ消費の方だが以前より攻撃的に eval "use ..." で必要な時だけモジュールをロードするように修正。 常にロードしてあった Jcode も必要な時だけに。 これで少しは減ってくれるかな?
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。