この記事では、主に Smarty テンプレート エンジンのキャッシュ メカニズムを紹介し、例の形で Smarty テンプレート エンジンのキャッシュ メカニズムの原理、有効化および使用方法、および関連する注意事項を分析します。お役に立てれば幸いです。
詳細は次のとおりです:
まず、smarty のキャッシュとコンパイルについて説明します。これらはデフォルトで有効になっていますが、smarty によってコンパイルされるファイルは手動で有効にする必要があります。 php ファイルのままであるため、実行されます。データベースが関与する場合は、依然としてデータベースにアクセスする必要があるため、オーバーヘッドが小さくないため、それを解決するにはスマートなキャッシュが必要です。
1. グローバル キャッシュをオンにする
$smarty->cache_dir = "/caches/"; //缓存目录 $smarty->caching = true; //开启缓存,为flase的时侯缓存无效 $smarty->cache_lifetime = 3600; //缓存时间
2. 1 つのページに複数のキャッシュを使用する
例: 記事テンプレート ページは複数の記事ページを生成します。もちろん、多くのページにキャッシュされます。 display() メソッドの 2 番目のパラメータを設定し、一意の識別子を指定する限り、実装は簡単です。次の PHP コード:
$smarty->display('index.tpl',$_GET["article_id"]);
上記と同様に、記事の ID の 2 番目のパラメーターを使用して記事ページをキャッシュします。
3. キャッシュのコストを削減します
つまり、キャッシュされたページはデータベースで処理する必要がなく、is_cached() メソッドを通じて判断できます。
if(!$smarty->is_cached('index.tpl')){ //调用数据库 } $smarty->display('index.tpl');
4. キャッシュをクリアします
通常、出力結果はキャッシュ時間中は変更されないため、開発プロセス中はキャッシュがオンになりませんが、アプリケーション プロセス中にキャッシュをオンにすると、Web パフォーマンスが大幅に向上します。キャッシュをクリアする方法は次のとおりです:
clear_all_cache();//清除所有缓存 clear_cache('index.tpl');//清除index.tpl的缓存 clear_cache('index.tpl',cache_id);//清除指定id的缓存
5. ローカル キャッシュをオフにする
ページの一部がキャッシュされており、別の部分をキャッシュする必要がない場合は、次のようにすることができます。ユーザーのログイン名を表示するには、キャッシュをオフにする必要があります。Smarty は次の 3 つの解決策を提供します。 方法:
(1) キャッシュされない挿入テンプレートの一部を使用する
挿入タグで使用する処理関数を定義する関数名の形式は次のとおりです: insert_xx (array $params, object &$smarty) ここで、xx は insert の名前です。つまり、定義した関数が insert_abc の場合、テンプレートで使用されるメソッドは {insert name です。 =abc}
パラメータは $params を通じて渡されます
これは挿入プラグインにすることもできます。ファイル名は insert.xx .php、関数の名前は Smarty_insert_aa($params, & $smarty)、xx 定義は上記と同じです
(2) $smarty->register_block($params, &$smarty) は、ページ全体の特定のブロックがキャッシュされるのを防ぎます
ブロックを定義します:
smarty_block_name($params,$content, &$smarty){return $content;} //name表示区域名
ブロックの登録:
$smarty->register_block(name, smarty_block_name, false); //第三参数false表示该区域不被缓存
テンプレートの書き込み:
{name}内容 {/name}
ブロックプラグインの書き込み:
ステップ 1: プラグイン関数を定義: block.cacheless.php して、smarty に配置します。 plugins ディレクトリの内容
block.cacheless.php は次のとおりです:
<?php function smarty_block_cacheless($param, $content, &$smarty) { return $content; } ?>
ステップ 2: プログラムとテンプレートを作成します
サンプル プログラム: testCacheLess.php
<?php include(Smarty.class.php); $smarty = new Smarty; $smarty->caching=true; $smarty->cache_lifetime = 6; $smarty->display(cache.tpl); ?>
使用するテンプレート:cache.tpl
已经缓存的:{$smarty.now}<br> {cacheless} 没有缓存的:{$smarty.now} {/cacheless}
今すぐ実行します。両方のコンテンツ行がキャッシュされていることがわかりました
ステップ 3: Smarty_Compiler.class.php を書き換えます(注: このファイルは非常に重要です。必要に応じて復元するために最初にバックアップしてください)
検索:
コードをコピー コードは次のとおりです:
$this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, true);
に変更します:
if($tag_command == cacheless) $this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, false); else $this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, true);
元の文の最後のパラメータを false に直接変更することもできます。これは、デフォルトのキャッシュをオフにすることを意味します。
(3) register_function を使用して、プラグインがキャッシュから出力しないようにします
index.tpl:
<p>{current_time}{/p} index.php: function smarty_function_current_time($params, &$smarty){ return date("Y-m-d H:m:s"); } $smarty=new smarty(); $smarty->caching = true; $smarty->register_function('current_time','smarty_function_current_time',false); if(!$smarty->is_cached()){ ....... } $smarty->display('index.tpl');
注:
関数を定義します。関数名の形式は次のとおりです: smarty_type_name($params, &$smarty )
type は関数です
name はユーザー定義のラベル名、ここでは {current_time} です
2 つのパラメーターは必須であり、関数内で使用されない場合でも記述する必要があります。 2 つのパラメータの機能は上記と同じです。
関連する推奨事項:
PHP フレームワークを構築するためのテンプレート エンジンの例を構築する
php のスマートなテンプレート演算子とは何ですか?演算子をどのように使用するか?
以上がSmarty テンプレート エンジンがキャッシュする方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。