ネットサービスの開発に役立ちそうな話題を中心にお届けします。
F.Ko-Jiの「一秒後は未来」 > プログラミング > SmartyにassignするデータをCache_Liteでキャッシュする
2007年04月20日 02:19
1756日前に投稿

SmartyにassignするデータをCache_Liteでキャッシュする

  • ... PV
  • このエントリーをはてなブックマークに追加

スポンサード リンク

Tips検索のページ表示処理がかなり遅かったのでキャッシュを使用するようにしました。具体的には、Smartyにassignする配列データをseriarizeしてCache_Liteでキャッシュするようにしただけです。これだけで体感10倍速くなりました。

Smartyにもキャッシュ機能はありますが、Smartyのキャッシュはテンプレート単位でキャッシュするようです。そのためクエリ付きのページに適用すると異なるクエリであっても同じコンテンツが表示されてしまうので使えません。

(補足: コメントで「Smartyのdisplayの第2引数にユニークなIDを与えれば、クエリ単位でもキャッシュできる」と教えていただきました。ありがとうございます。)

そこで、Smartyの表示結果ではなくSmartyに与えるデータをキャッシュする方法を採用しました。処理の流れをかなり省略して書くと以下の通り。

$cache = new Cache_Lite($options);
/* キャッシュ取得 */
$data = $cache->get($query);
if (!$data) {
    /* データ生成処理 */
    ・・・
    /* キャッシュ保存 */
    $cache->save(serialize($contents), $query);
} else {
    /* キャッシュデータを利用 */
    $contents = unserialize($data);
}
$smarty->assign($contents);
$smarty->display();

Tips検索の各ページは更新頻度が低いコンテンツで構成されているので、キャッシュのライフタイムは長めに48時間を設定しています。キャッシュされていないページは最初の1回目の表示だけは重いですが、2回目以降は素早く表示されます。

サイト内の大半のページは検索エンジンのクローラーが人より先にアクセスするので、検索エンジンが48時間以内にクロールしたページは表示が速くなります。本当はクローラーが拾いに来るときのページ生成を速くしたいのですが、それはなかなか難しいでしょうか。

スポンサード リンク

Written by
Meity.jp - 「DM送りたいのでフォローしてください」とかめんどくさくないですか?


トラックバック

このエントリーのトラックバックURL:

コメント

クエリ付きのページでも、セッション変数を利用しているページでも、display() の第2引数である、cache_id をそれらに応じて unique にしてあげれば、クエリ毎でも、セッション変数毎にでも、キャッシュすることができます。(当然キャッシュファイルの量は増大します)

http://smarty.php.net/manual/en/caching.multiple.caches.php

>>とおりすがり様
Smartyのマニュアルあまり見ていなかったのでdisplayの第2引数は気づきませんでした。教えていただいてありがとうございます!

プログラミング

English version

前のエントリー: « 無料で使える7つのSEOツール
次のエントリー: Bloglinesの登録フィードがすべて未読になる異常事態発生 »

コピペにご利用ください。

タイトル:

URL:

リンク用HTMLタグ: