ホームページ > バックエンド開発 > PHPチュートリアル > Smarty テンプレート エンジンがキャッシュする方法の詳細な説明

Smarty テンプレート エンジンがキャッシュする方法の詳細な説明

*文
リリース: 2023-03-18 20:58:01
オリジナル
1530 人が閲覧しました

この記事では、主に 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(&#39;current_time&#39;,&#39;smarty_function_current_time&#39;,false);
if(!$smarty->is_cached()){
  .......
}
$smarty->display(&#39;index.tpl&#39;);
ログイン後にコピー

注:

関数を定義します。関数名の形式は次のとおりです: smarty_type_name($params, &$smarty )
type は関数です

name はユーザー定義のラベル名、ここでは {current_time} です

2 つのパラメーターは必須であり、関数内で使用されない場合でも記述する必要があります。 2 つのパラメータの機能は上記と同じです。

関連する推奨事項:

キャッシュを使用した Yii2 の簡単な分析

PHP フレームワークを構築するためのテンプレート エンジンの例を構築する

php のスマートなテンプレート演算子とは何ですか?演算子をどのように使用するか?

以上がSmarty テンプレート エンジンがキャッシュする方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート