2004年10月14日
エントリー保存時にインデックスをリビルドしない
前のエントリーに引き続き、次々エントリーを編集したいときの話。
次々エントリーを編集していくときは、一つ保存するたびにいちいちインデックスをリビルドされると時間とCPUの無駄。なのでリビルド権限のないユーザーを作って試してみたが、エントリー保存の際は権限がなくてもリビルドしてしまう。そこでlib/MT.pmを読んでみると、コード中のコメントに、エントリの依存関係を考慮するのは大変だから前後のエントリーとインデックスは決め打ちでまとめてリビルドしちゃうよーんとか書いてある。一応 BuildDependencies というフラグがあるので、これを利用して他のファイルをリビルドしないように変更する。
lib/MT/App/CMS.pm 2320行目
これでリビルド権限のないユーザーで入って編集しているときはエントリー自身以外のファイルはリビルドされなくなった。リビルドしたいときは権限を持ったユーザーで入り直してリビルドする。
追記
しかし考えてみるとエントリー自身のリビルドも無駄。エントリーのタイトルなどを変更した場合はIndividual Archiveをまとめてリビルドしないと前後のエントリーの<MTEntryPrevious>や<MTEntryNext>に表示されるタイトルが古いままになってしまう。Individual Archiveをまとめてリビルドすれば編集したエントリー自身も当然リビルドされるので、二重にリビルドすることになる。
そもそも権限がなくてもリビルドされるようになっているのは、そうじゃないと普通は不便だからだが、ここにあげているような状況の場合は逆に厳密に権限に従うのが理に適っている。
というわけで結局上記の変更は破棄して以下のようにした。
lib/MT/App/CMS.pm 1747行目