codecamp

Smarty配置缓存时间

配置缓存时间

缓存可以通过设置 $caching为:Smarty::CACHING_LIFETIME_CURRENT 或Smarty::CACHING_LIFETIME_SAVED来开启。

Example 15.1. 开启缓存

<?php
require('Smarty.class.php');
$smarty = new Smarty;

// 使用$smarty->cacheLifetime()可以更精确定义缓存时间

$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);

$smarty->display('index.tpl');
?>

开启了缓存,调用display('index.tpl') 会正常渲染模板,但也会保存一份输出的内容到$cache_dir目录下的文件中(缓存副本)。 在下一次调用display('index.tpl'), 缓存文件会替代渲染模板的过程。

技术说明

$cache_dir下的文件,文件名与模板名称相似。 虽然这些文件也有.php后缀,但它们不会被直接执行。请不要编辑这些文件!

每个缓存页面都有一个缓存过期时间$cache_lifetime。 默认是3600秒,也就是一小时。 当超过了此时间,缓存将被重新生成。 当设置$cachingSmarty::CACHING_LIFETIME_SAVED时,可以给每个缓存设置其单独的缓存时间。 参见$cache_lifetime

Example 15.2. 为每个缓存设置$cache_lifetime

<?php
require('Smarty.class.php');
$smarty = new Smarty;

// 让每个缓存的过期时间都可以在display执行前单独设置。
$smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);

// 设置index.tpl的过期时间为5分钟
$smarty->setCacheLifetime(300);
$smarty->display('index.tpl');

// 设置home.tpl的过期时间为1小时
$smarty->setCacheLifetime(3600);
$smarty->display('home.tpl');

// 注意:当$caching设置了Smarty::CACHING_LIFETIME_SAVED后,
// 下面的$cache_lifetime将不会起效。
// home.tpl已经设置了过期时间为1小时,
// 所以不会再遵循下面的$cache_lifetime值,
// home.tpl的过期时间还是1小时。
$smarty->setCacheLifetime(30); // 30 秒
$smarty->display('home.tpl');
?>

当 $compile_check开启的时候(默认开启), 每个模板文件和配置文件都会在缓存检查的时候执行编译检查。 如果这些文件在缓存生成后被修改,那么缓存会马上重新生成。 这是一个覆盖的选项,所以更好的性能建议把 $compile_check 设置成false。

Example 15.3. 关闭 $compile_check

<?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
$smarty->setCompileCheck(false);

$smarty->display('index.tpl');
?>

如果开启了 $force_compile, 缓存文件将总是会重新生成。效果和关闭缓存是一样的, 而且还会降低性能。 $force_compile 一般用于 调试的目的。 更确当的方式是把缓存$caching设置成Smarty::CACHING_OFF。

isCached() 函数可以检查模板的缓存是否存在。 如果你的模板是需要读取某些数据(如数据库), 那么你可以用它来跳过这个过程。

Example 15.4. 使用 isCached()

<?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);

if(!$smarty->isCached('index.tpl')) {
	// 找不到缓存,这里进行一些赋值操作
    $contents = get_database_contents();
    $smarty->assign($contents);
}

$smarty->display('index.tpl');
?>

你可以使用{nocache}{/nocache}来设置页面上部分区块是动态的(不缓存), 同样你也可以使用 {insert}函数,或者nocache参数来达到同样目的。

比如说我们希望把整个页面缓存,除了页面两边显示的banner广告。 那么我们可以用{insert}来显示banner广告, 这样就可以在缓存的内容里面,保存广告部分的动态效果。 参见 {insert}的详细文档。

你可以通过clearAllCache()来删除全部缓存,或者 用clearCache() 来删除特定的缓存组的缓存内容。

Example 15.5. 删除缓存

<?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);

// 仅删除index.tpl的缓存
$smarty->clearCache('index.tpl');

// 删除全部缓存
$smarty->clearAllCache();

$smarty->display('index.tpl');
?>
Smarty成员方法:testInstall()
Smarty单页多个缓存
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

I.Smarty基础

1.Smart是什么?

II.Smarty模板设计师篇

6.Smarty复合修饰器

9.Smarty配置文件

10.Smarty调试控制台

III. 程序开发者篇

11. Smarty字符集编码

12.Smarty常量

13.Smarty成员变量

14.Smarty成员方法

17.Smarty高级特性

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }