页面缓存
1.先使用数据库加载一组数据。
//PDO 数据库连接
$pdo = new PDO('mysql:host=localhost;dbname=grade', 'root', '123456');
//设置字符集
$pdo->query('SET NAMES UTF8');
//得到准备对象
$stmt = $pdo->prepare("SELECT * FROM one");
//执行 SQL 语句
$stmt->execute();
//初始化
$object = [];
//组装数据列表
while ($rows = $stmt->fetchObject()) {
$object[] = $rows;
}
//输出显示
echo '执行了数据库操作';
$smarty->assign('object', $object);
$smarty->display('12.tpl');
<table border="1">
<tr>
<th>姓名</th>
<th>数学</th>
<th>语文</th>
<th>英语</th>
</tr>
{foreach from=$object item=obj}
<tr>
<td>{$obj->user}</td>
<td>{$obj->math}</td>
<td>{$obj->chinese}</td>
<td>{$obj->english}</td>
</tr>
{/foreach}
</table>
暴露问题:这张数据表,可能很长时间不会有所改动,比如一天,一周,一个月都不会
改动。但是,用户每次访问,都要经过数据库,造成性能上的极大浪费。这时,我们想通过
缓存技术,将第一次生成的页面静态化,然后以后就访问这个静态页面,从而避免执行数据
库操作。
2.开启缓存
//在配置文件里开启缓存设置
$smarty->caching = true;
//缓存的目录,第一次会自动生成
$smarty->cache_dir = 'cache';
刷新页面后,会自动生成 cache 目录。并生成了一个静态页面,下次访问是会访问这
个静态页面。不会因为数据库数据改变,而发生变化。但是,这个地方还是有问题的,虽然
访问的是静态页面。但并没有说,不执行 PHP 连接数据库,执行数据库这个步骤,所以,
我们还需要进行静态页面的判断工作。
3.判断缓存
//判断缓存是否存在
if (!$smarty->isCached('12.tpl')) {
}
先判断缓存是否存在,然后再执行 PHP 代码(包括执行数据库连接和执行)。如果存
在缓存,就直接忽略 PHP 代码部分,直接读取缓存,这样避免数据库执行浪费。
二.局部不缓存
1.使用{nocache}...{/nocache}让局部不缓存。
{nocache}
{$smarty.now|date_format:"Y-m-d H:i:s"}
{/nocache}
2.如果不缓存的内容本身是标签,可以在标签后直接加上 nocache 即可。
{$smarty.now|date_format:"Y-m-d H:i:s" nocache}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。