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;
        }
 }