Smarty 構成と高度なキャッシュ技術の共有
前言
Smarty 是一个出色的PHP模板引擎,它分离了逻辑代码和user interface。
学习和使用Smarty,没有应用到它的缓存技术是一个很大的损失,它可以将用户最终看到的HMTL文件缓存成一个静态的HTML页,当设定Smarty的cache属性为true时,在Smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,这相当于调用一个静态的HTML文件,给后台服务器减少很多负担。
下载与配置
官方下载:Smarty Download
下载完后,解压到自己项目的文件目录下。
复制代码 代码如下:
require('../libs/Smarty.class.php');
$smarty = new Smarty;
//$smarty->force_compile = true; //强迫编译
$smarty->debugging = true; //调试
$smarty->caching = true; //开启缓存
$smarty->cache_lifetime = 120; //缓存存活时间(秒)
$smarty->cache_dir = MY_SMARTY_DIR . '/cache/' ; //设置缓存的存放路径
注意:如果你发现缓存文件每次浏览都会发生改变,请看 Smarty的 force_compile , 它会强迫Smarty每次调用(重新)编译模板。这项设置不受$compile_check的限制。默认情况下,它是无效的。它对于开发和调试很方便.但它决不能使用于产品环境下.如果启动了缓存,每次将会重新生成缓存文件.
$smarty->force_compile = false; //强迫编译
Smarty 缓存技术
全局缓存
局部缓存
insert 法
动态 block 法
插件 block 法
全局缓存技术
顾名思义,全局缓存就是把整个页面生成缓存文件,指定该缓存文件的存活时间,在指定时间内再次浏览整个页面,将直接读取缓存文件。
复制代码 代码如下:
$smarty->caching = true; //开启缓存
$smarty->cache_lifetime = 120; //缓存存活时间(秒)
注意:一个模板只能有一个缓存文件,如果您的模板存在多个页面的话,就要为缓存 设置一个ID。 例如一个页面有多个文章:
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 test";
$query = mysql_query($sql);
$row = mysql_fetch_row($query);
$smarty->assign("loaddatabase",$row[1]);
}
这里又有问题了,如果我改了数据库的某个内容,想更新显示内容,但是缓存又还没到消亡时间,那该肿么办呢?
$smarty->clearCache("index.tpl");
上面的clearCache可以解决这个问题,只要更新了数据后,调用clearCache清除一下缓存就可以了。
PS:我用的是Smarty3版本,这个版本很多方法的命名都发生变化了,如果是Smarty2的话会出现“Call of unknown method ‘isCached'.”,请使用$smarty->is_cached()。
后面出现的 Smarty3:registerPlugin(), Smarty2:register_block() 也一样是版本的问题。
下面我们来看一下有缓存和没缓存的速度比较:
1.首次浏览,没有缓存 Total Time 0.01421
2.第2次浏览,有缓存 Total Time 0.00308
ここのindex.phpには数行のコードしかありませんが、データ量が多い場合には、明らかな違いが生じます。
部分キャッシュ技術
部分キャッシュ = 部分キャッシュ、つまり、ページのキャッシュにおいて、すべてのキャッシュが生成されないように、特定の機能モジュールをカスタマイズしてキャッシュを生成することができます。データは閲覧するたびにキャッシュされます。
例: Web ページにはユーザーのステータス、Web ページの統計、広告バナーなどが表示されます。これらのデータは非常に高速に更新されるため、キャッシュには適していません。 . このように、ローカルキャッシュは便利です。
ローカル キャッシュには 3 つの方法があります。
1. Insert メソッド
insert に含まれるコンテンツはキャッシュされず、関数は毎回再実行されます。
使用法:
ここでの関数名は insert で始まる必要があり、テンプレート内の名前はそれに対応していることに注意してください。
index.php
コードをコピー コードは次のとおりです:
//次の時間を定義します。 test insert と通常の assign
$date = date("Y-m-d H:i:s");
$smarty->assign("date", $date);
function insert_get_current_time($date){
return date("Y-m-d H:i:s");
}
コードをコピーします コードは次のとおりです:
nocache:{insert name="get_current_time"}
cache: {$date}
[code]
次に、生成されたキャッシュ ファイルを確認します。 結論 insert は、テンプレートが呼び出されるたびに関数を再実行します
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]
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 コードとして解析されないということです。
著者: その瞬間

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています
