ホームページ >バックエンド開発 >PHPチュートリアル >Smarty 構成と高度なキャッシュ技術の共有_PHP チュートリアル

Smarty 構成と高度なキャッシュ技術の共有_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:19:13889ブラウズ

はじめに

Smarty は、論理コードとユーザー インターフェイスを分離する優れた PHP テンプレート エンジンです。

Smarty のキャッシュ属性を true に設定すると、キャッシュ テクノロジーを適用せずに Smarty を学習して使用することは大きな損失となります。 Smarty では、ユーザーの WEB リクエストはこの静的 HTML ファイルに直接変換されます。これは、静的 HTML ファイルを呼び出すのと同等であり、バックエンド サーバーの負担を大幅に軽減します。

ダウンロードと設定

公式ダウンロード: Smarty ダウンロード

ダウンロード後、プロジェクトのファイル ディレクトリに解凍します。

コードをコピーします コードは次のとおりです:

require('../libs/Smarty.class.php');
$smarty = new Smarty
//$smarty-> force_compile = true; //強制コンパイル
$smarty->debugging = true; //デバッグ
$smarty->cache_lifetime = 120; (秒)

$smarty->cache_dir = MY_SMARTY_DIR . '/cache/' ; //キャッシュ ストレージ パスを設定します

注: キャッシュ ファイルがブラウズするたびに変更される場合は、Smarty の Force_compile を参照してください。 Smarty が呼び出されるたびにテンプレートが (再) コンパイルされます。この設定は $compile_check によって制限されません。デフォルトでは無効になっています。開発やデバッグには非常に便利ですが、キャッシュが有効になっている場合は、毎回キャッシュ ファイルが再生成されます。

Smarty キャッシュ技術


グローバル キャッシュローカル キャッシュ
挿入メソッド
ダイナミック ブロックメソッド
プラグイン ブロックメソッド


グローバル キャッシュ テクノロジ


その名前が示すように、グローバル キャッシュは、ページ全体を参照し、キャッシュ ファイルの生存時間を指定すると、指定した時間内にページ全体を再度閲覧すると、キャッシュ ファイルが直接読み取られます。

コードをコピーします
コードは次のとおりです: $smarty->caching = true; //キャッシュを有効にする$smarty->cache_lifetime = 120; //キャッシュ生存時間 (秒)


注: テンプレートに複数のページがある場合は、キャッシュ ファイルを 1 つだけ設定する必要があります。 たとえば、ページに複数の記事があるとします。
http://website/index.php?p=1
http://website/index.php?p=2



コードをコピーします
コードは次のとおりです。次のように: //$_SERVER['REQUEST_URI'] メソッド//現在のページの URL (? 以降のすべてのパラメーターを含む) を md5 で暗号化します
$url=md5($_SERVER['REQUEST_URI']);
//キャッシュを設定する ファイル名
$smarty->display('index.tpl',$url);



キーポイント: キャッシュテクノロジーを使用する主な理由は、データベースへの読み取りと書き込みを減らすことです。したがって、$smarty->isCached('index.tpl') を使用してキャッシュが存在するかどうかを判断する必要があります。存在する場合は、データベースを再度操作しないでください。


コードをコピーします
コードは次のとおりです: if(!$smarty->isCached('index.tpl')){ echo "ACACHE NO FOUND!";
$sql = "SELECT * FROM テスト ";
$query = mysql_query($sql);
$row = mysql_fetch_row($query);
$smarty->assign("loaddatabase",$row[1]);
}


ここで別の問題が発生します。データベース内で何かを変更し、表示コンテンツを更新したいが、キャッシュの有効期限がまだ切れていない場合、どうすればよいでしょうか?
$smarty->clearCache("index.tpl");
上記のclearCacheは、データを更新した後にclearCacheを呼び出すだけでこの問題を解決できます。

追記: Smarty3 バージョンを使用しています。このバージョンでは多くのメソッドの名前が変更されています。Smarty2 の場合、「$smarty->is_cached() を使用してください。」と表示されます。 。
後で登場する Smarty3:registerPlugin() と Smarty2:register_block() もバージョンの問題です。

キャッシュありとなしの速度の比較を見てみましょう:
1. 初めての閲覧、キャッシュなし 合計時間 0.01421

2. 2 回目の閲覧では、合計時間 0.00308
が存在します。

ここでは、index.php のコードは数行しかありませんが、データ量が多い場合は、明らかな違いが生じます。

部分キャッシュ技術

部分キャッシュ = ページのキャッシュです。すべてのキャッシュが生成されるわけではありません。特定の機能モジュールをカスタマイズして、閲覧するたびにデータが更新されます。

例: Web ページ ユーザー ステータス、Web ページ統計、広告バナーなどを表示します。これらのデータは非常に速く更新されるため、キャッシュには適していません。このように、ローカル キャッシュは便利です。

ローカル キャッシュには 3 つの方法があります:

1. Insert メソッド

insert に含まれるコンテンツはキャッシュされず、テンプレートが呼び出されるたびに関数が再実行されます。ここでの関数名に注意してください。関数名は insert で始まる必要があり、テンプレート内の名前はそれに対応しています。

index.php



コードをコピーします
コードは次のとおりです: //insertと通常のassignの違いをテストする時間を定義します$date = date("Y-m-d H:i:s ");
$ Smarty->assign("date", $date);
//insert
function insert_get_current_time($date){
return date("Y-m-d H:i:s");
}


Index.tpl


コードをコピーします
コードは次のとおりです: nocache:{insert name="get_current_time"} cache: {$date}
[code]
次に、生成されたキャッシュ ファイルを確認します。 : insert が毎回テンプレートを呼び出すという結論を導き出します 関数が再実行されます


nocache:),$_smarty_tpl);?>
cache: 2012-06- 04 15:46:52



コードをコピー
コードは次のとおりです: この方法は簡単ですが、表示するコンテンツが大きい場合は使用しないでください。
2. 動的ブロックメソッド

phpのカスタムブロック
index.php
[code]
//smarty 3
//関数宣言
function Smarty_block_nocache ($param,$content,$smarty)
{
return $content ;
}
// Smarty に登録します
$smarty->registerPlugin("function","nocache", "smarty_block_nocache");


冒頭で述べたように、Smarty3 は registerPlugin を使用し、Smarty2 は register_block を使用します

index .tpl

{nocache}{$date}{/nocache}
次に、キャッシュ ファイルを確認して、テンプレートが呼び出されるたびに $date が再実行されると結論付けます
[/code]
tpl_vars['date']->value;?>



コードをコピーします
コードは次のとおりです: 3. このメソッドは次のようなものです。 2 つ目は、php を追加するだけです。カスタム ブロックは、smarty ディレクトリの plugins フォルダーに配置されます。
次の内容を含むファイル block.nocache.php を Smarty/plugins ディレクトリに作成します。
function Smarty_block_nocache($param, $content, $smarty)
{
return $content;
?>
[code]
tpl テンプレートでの使用方法は 2 番目のメソッドと同じです


Smarty キャッシュ テクノロジーは Web サイトの速度と品質を大幅に向上させることができ、その使用方法は比較的簡単であると結論付けることができます。

最後の注意点は、Smarty によって生成されたキャッシュ ファイルの拡張子は php ですが、php コードとして解析されないということです。

Author: That Moment

http://www.bkjia.com/PHPjc/325393.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/325393.html技術記事はじめに Smarty は、論理コードとユーザー インターフェイスを分離する優れた PHP テンプレート エンジンです。 キャッシュ技術を適用せずに Smarty を学習して使用することは大きな損失です...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。