2013年6月 のアーカイブ


たまにボンヤリしてやってしまったり、運用はお任せな時に問合せを受けることがあるのでメモ。
次回お問い合わせを受けた際には参考までにということでURLをお送りできるし。

テンプレートエンジンは、テンプレートファイルでWEBページの更新をします

phpのsmartyなどのテンプレートエンジンでは、直接HTMLファイルを公開ディレクトリに置くのでは無く、規定の場所にテンプレートファイルを置くことでページを更新する。

テンプレート内にはルールに添って書かれたコードが一部入っているものの、概ねHTMLなので更新は比較的楽だし、システム寄りの知識が無くても、アンタッチャブルな部分、もしくは直すべき部分が認識出来るスキルさえあれば更新出来る。

ただしテンプレートエンジンは処理負荷があります

WEBサイトでページを表示する際、ただ単にHTMLのテキストを返すだけの処理にくらべて、テンプレートに沿って動的に文言を埋めたHTMLを返す方が、処理が発生する分、負荷がかかる。

その処理をなるべく軽くする為に、テンプレートエンジンのシステムではテンプレートから中間ファイルを作ってキャッシュする手法を取ることが多い。中間ファイルのキャッシュはテンプレートエンジンが扱い易い形式になっていて、人が見てわかりやすいテンプレートよりも処理量が少なくて済む。

もちろんその中間ファイルを作成するのにも負荷がかかるわけで、出来る限り中間ファイルのキャッシュを使いまわして負荷を減らすようになっている。

なのでテンプレートが更新されたかチェックされます

上記の理由から、テンプレートファイルが更新されたと判断されない限りはキャッシュが使われる。

そんな理由から起きる、ありがちなトラブル

今まであったテンプレートファイルを一旦退避して新しいのに上書きした後、やっぱり戻します、という場合に、退避したファイルを再度アップすると更新されない、というケースがある。

パニックになった感じで言えば「ファイルを元に戻したのに、元に戻らない!」という具合。

原因はファイルのタイムスタンプ

何故そういった現象が起きるかと言うと、テンプレートエンジンからはテンプレートファイルが更新されて無いように見えるから。

再度アップした退避ファイルのタイムスタンプが古いままだと、テンプレートエンジンは新しいファイルを上書きした際に作られたキャッシュを見てしまうので、元に戻しても無視された状態になる。

ファイルのタイムスタンプを新しくすることで解決

ファイルのタイムスタンプを上書きするファイルより新しくすることで、テンプレートエンジン側に更新があったと判断させることが出来る。

テンプレートエンジン側は、テンプレートの中身が変わろうが、元に戻ろうが、そんなのはお構いなしに手元で抑えているキャッシュのタイムスタンプと比べているだけの場合が多い。

なので、とにかく注意するべきはファイルのタイムスタンプだということ。分かってしまえば簡単なことだし、そんなに意識しなくたって良いのだけど、たまに忘れてあれあれ?なんてこともある。