TYPOlight 2.6.7のキャッシュのバグ
TYPOlight 2.7.0のリリース予定当日となってから、TYPOlight 2.6.7の記事となりますが、私的に影響が大きかったので書いておきたいと思います。
TYPOlightのキャッシュ機能
TYPOlightはWebクライアントからのリクエストに応じて、XHTMLのページを生成して、その結果をWebクライアントに返します。
このページを生成する処理には、データベースへの問い合わせ、テンプレートの解析等の様々な処理の結果が必要となります。ページによっては、生成される結果は毎回異なるかもしれませんが、中には殆ど同じかもしれません。
結果が同じとなるページについては、生成した内容を保存しておいて、次のリクエストで結果を返すようにすると、Webサーバでの効率を著しく向上させることができます。
TYPOlightでは、このような動作をキャッシュの機能として提供しています。
- 「ページ」を単位にキャッシュするかどうか、キャッシュする場合を指定できます。中にはキャッシュしてはいけないページもあります。
- キャッシュを有効にしたページはHTTP応答ヘッダにExpireフィールドが負荷されるます。キャッシュを行うproxyサーバなどでも、この情報が有効に生かされることが期待できます。
- キャッシュを行うか行わないかはページ単位となります。
- 指定が明示されていない場合は親のページを引き継ぎます。
- キャッシュはバックエンドの「システム保守」、TYPOlight 2.7以降では併せて個人設定のページから、キャッシュの削除ができます。
- キャッシュを削除する場合は、特定のページに対応したキャッシュを削除することはできません。(ページを問わず削除となります。)
キャッシュの指定 | 選択可能な時間 |
---|---|
キャッシュしない | |
秒単位でキャッシュ | 15秒、30秒 |
分単位でキャッシュ | 1分、5分、15分、30分 |
時間単位でキャッシュ | 1時間、6時間、12時間 |
日単位でキャッシュ | 1日、3日、7日 |
TYPOlight 2.6.7のキャッシュのバグ
TYPOlight 2.6.7で、このキャッシュ機能にバグがありました。症状としては、
キャッシュされるとページの内容が二重になる。
というものです。
ブラウザでページの再読み込みを実行すると、見事に発生します。Webページのソースを表示すると、やはり見事にドキュメントタイプから</html>に至るまでが二重となります。
原因と解決方法
原因は、バージョン2.6.7で入れられた修正の、ほんのちょっとした誤りでした。(余分にコードを削ってしまったのでしょう。)
--- index.php.orig 2009-03-11 23:03:17.000000000 +0900 +++ index.php @@ -271,6 +271,7 @@ class Index extends Frontend // Replace insert tags echo $this->replaceInsertTags($strBuffer); + exit; } }