分过程来说:
第一次设置缓存:
$smarty->caching= 1;
$smarty->cache_lifetime= 300; //第一次设置缓存
编译后会在cache_dir里生成一个缓存文件,这个文件里包含有此次生成缓存文件时的cache_lifetime,就是300秒;
然后修改
$smarty->caching= 2;
$smarty->cache_lifetime= 5;//第二次设置缓存
更改一些内容后再次编译,如果只看cache_lifetime,应该是5秒后更改的内容会起作用,但是事实是必须要等到300秒才行,因为caching等于2,会按照目前cache_dir里那个缓存文件内的cache_lifetime(300秒)的来计算缓存时间,而不是此次设置的5秒。直到再次更新缓存,才会把第二次设置的cache_lifetime(5秒)记录到缓存文件里去。
如果第二次设置缓存时候:
$smarty->caching= 1;
$smarty->cache_lifetime= 5;//第二次设置缓存
那么只要过5秒更改的内容会起作用。
smarty开启静态缓存时,是会生成html静态页面,此时可以不执行任何-逻辑,只要首先判断是否有缓存生成,有的话直接输出,然后直接停止脚本,这样效率是非常高的,相当于直接打开静态页面,
不开启静态缓存时,那就会生成模板编译文件,把所有smarty标签转换成echo变量的形式,并不能提高任何效率,但也不会增加太多额外的执行时间,
“smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的HTML页,当设定smarty的cache属性为true时,在smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,这相当于调用一个静态的HTML文件。”
“smarty 不是直接生成html静态页面文件, smarty的cache还是php文件去读取的,只是缓存了模板执行的结果”
如果没开启缓存caching=false,第一次执行时,生所tmeplates_c下的编译文件,下次访问只要不改动tmplates下的模板文件即使数据库更新,程序也会直接访问编译文件,(编译文件也是php文件)
如果开启了缓存caching=true,以缓存周期内cache_lifetime,只要不改动模板文件即使数据库更新,程序直接访问缓存html文件。过了缓存周期,程序访问编译文件生成新缓存,
在缓存周期内,如果改动了模板文件,程序会重新读取模板生成编译文件成缓存