前言Smarty是一个优秀的PHP模板引擎,它将逻辑代码和用户界面分开。学习和使用Smarty是很大的损失。它可以将用户最终看到的HMTL文件缓存到静态网页中。当Smarty的cache属性设置为true时,用户的WEB请求会在Smarty设置的cachetime期间内直接转换成这个静态HTML文件,相当于调用了一个静态HTML文件,从而减轻了后台服务器的很多负担。下载配置正式下载:Smarty Download下载完成后,解压到自己项目的文件目录。复制代码如下:require('./libs/smarty . class . PHP ');$smarty=新Smarty;//$ smarty-force _ compile=true;//strong制编译$ smarty-debug=true;//debug $ smarty-cache=true;//Open cache $ smarty-cache _ lifetime=120;//缓存生存期(秒)$ smarty-cache _ dir=my _ smarty _ dir。/cache/';//设置缓存的存储路径。注意:如果你发现缓存文件每次浏览都会改变,请看看Smarty的force_compile,它会强制Smarty每次调用(重新编译)模板。此设置不受$compile_check的限制。默认情况下,它是无效的。便于开发和调试。但是,它不能在生产环境中使用。如果开始缓存,每次都会重新生成缓存文件。$ smarty-force _ compile=false;//编译Smarty Cache技术全局缓存本地缓存插入方法动态块方法插件块方法全局缓存技术顾名思义,全局缓存就是从整个页面生成一个缓存文件,指定缓存文件的生存期,在指定的时间内再次浏览整个页面,直接读取缓存文件。复制代码如下: $ smarty-cache=true;//Open cache $ smarty-cache _ lifetime=120;//缓存生存期(秒)注意:一个模板只能有一个缓存文件。如果模板中有多个页面,您应该为缓存设置一个标识。比如一个页面上有多篇文章:http://网站/index.php?p=1网站/index.php?P=2复制代码如下:/$ _ SERVER[' REQUEST _ URI ']方法//设置当前页面的URL(包括?以下所有参数)为md5加密$ URL=MD5($ _ server[' request _ uri ']);//设置缓存文件名$ smarty-display ('index.tpl ',$ URL);重要提示:使用缓存技术的原因之一是为了减少对数据库的读写,所以我们应该使用$ smarty-iscache(' index . TPL ')来判断缓存是否存在,如果存在,就不要再操作数据库了。复制的代码如下: if(!$ smarty-isCACHE(' 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清除缓存即可。PS:我用的是Smarty3版本,这个版本很多方法的命名都变了。如果是Smarty2,“调用未知方法‘已连接’。”请使用$smarty-is_cached()。以下smarty3:寄存器插件()和smarty2: register _ block()也是版本问题。让我们看看缓存和未缓存之间的速度比较:1。第一次浏览,总时间0.01421没有缓存。
2.第二次访问,有缓存totaltime 0.00308 。
我的index.php只有几行代码。如果数据量大,就会有明显的差异。本地缓存技术本地缓存=部分缓存,也就是说,并非所有缓存都是在页面的缓存中生成的。可以设置某个功能模块不生成缓存,每次浏览都更新数据。例如,网页显示用户的状态、网页的统计数据、广告栏等。这些数据更新非常快,不适合缓存。这样,本地缓存将非常有用。本地缓存有三种方法:第一,insert方法,insert中包含的内容不会被缓存,每次调用模板都会重新执行函数。用法:注意这里的函数名必须以insert开头,模板中的名称与之对应。Index.php复制代码如下: //定义一个时间来测试插入和普通赋值$ date=date ('y-m-d h:i 3360s ')的区别;$smarty-assign('date ',$ date);//insert函数insert _ get _ current _ time($ date){ return date(' Y-m-d h : I :s ');} index.tpl复制代码如下: nocache3360 { insert name=' get _ current _ time ' } cache : { $ date }[code]然后看一下生成的cache文件:得出结论:函数no cache 3360将在每次insert调用模板时重新执行。PHP echo insert _ get _ current _ time(array(),$ _ smarty _ TPL); 2012-06-04 15:46:52复制代码如下:这个方法很简单,但是如果要显示的内容是一大块,就不应该使用。二、动态块方法php自定义块index.php[代码]//smarty 3//函数声明函数smarty _ block _ nocache ($ param,$ content,$ smarty){ return $ content;} //注册smarty $ smarty-register plugin(' function ',' nocache ',' smarty _ block _ no cache ');如开头所述,Smarty3使用registerPlugin,Smarty2使用register _ blockindex。TPL {nocache} {$ date} {/nocache},然后查看缓存文件。结论是$date [/code]将在每次调用模板时重新执行。PHP echo $ _ smarty _ TPL-TPL _ vars[' date ']-值;复制代码如下: 3。插件块方法这个方法类似于第二个方法,不同的是php中的自定义块放在smarty目录的plugins文件夹中。在Smarty/plugins目录下创建一个文件。block.nocache.php的内容如下:php函数smarty_block_nocache($param,$content,$ smarty){ return $ content;} ?【代码】第三方物流模板的使用与第二种方法相同,可以总结Smarty缓存技术,大大提高网站的速度和质量,使用起来也比较简单。最后提醒一下,虽然Smarty生成的缓存文件的扩展名是php,但不会被解析为php代码。作者:那一刻。