gpt4 book ai didi

Smarty的配置与高级缓存技术分享

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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  。

Smarty的配置与高级缓存技术分享

2.第2次浏览,有缓存 Total Time 0.00308  。

Smarty的配置与高级缓存技术分享

这里我的index.php里只有几行代码,如果数据量大的话,就有明显的区别。  局部缓存技术  局部缓存 = 部分缓存, 就是一个页面的缓存中,并不是全都生成缓存,可以自定义设置某个功能模块不生成缓存,每次浏览都会更新数据;  例如:网页显示用户的状态、网页的统计数据、广告条等,这些数据的更新速度都非常快,不宜缓存,这样,局部缓存便有用武之地了。  局部缓存有3个方法:  1、insert法  insert 所包含的内容不会被缓存,每次调用该模板都会重新执行该函数.  使用方法:  注意这里的函数名一定要以insert开头,模板中的name与之对应。  index.php  。

复制代码代码如下

//定义一个时间来测试insert与普通assign的差别  $date = date("Y-m-d H:i:s");  $smarty->assign("date", $date);  //insert  function insert_get_current_time($date){  return date("Y-m-d H:i:s");  }  。

index.tpl  。

复制代码代码如下

nocache:{insert name="get_current_time"}  cache: {$date}  [code]  然后看生成的缓存文件:得出结论 insert 每次调用该模板都会重新执行该函数  。

nocache:<?php echo insert_get_current_time(array (  ),$_smarty_tpl);?>  cache: 2012-06-04 15:46:52  。

复制代码代码如下

这种方法简单,但是如果要显示的内容是一大块的,就不宜使用了。  2、动态block 法  php中自定义块  index.php  [code]  //smarty 3  // function declaration  function smarty_block_nocache ($param,$content,$smarty)  {  return $content;  }  // register with smarty  $smarty->registerPlugin("function","nocache", "smarty_block_nocache");  。

开始有提到过,Smarty3是用registerPlugin , Smarty2则是用register_block  index.tpl  {nocache}{$date}{/nocache}  然后看缓存文件 , 得出结论每次调用该模板都会重新执行$date  [/code]  <?php echo $_smarty_tpl->tpl_vars['date']->value;?>  。

复制代码代码如下

3、插件block 法  这个方法和第2个差不多,只是把php中的自定义块,放到smarty目录中的plugins文件夹中。  在Smarty/plugins目录下建一个文件 block.nocache.php 内容如下:  。

<?php  function smarty_block_nocache($param, $content, $smarty)  {  return $content;  }  ?>  [code]  tpl模板中的使用和第二个方法一样  总结  可以总结出Smarty缓存技术,能大大的提高网站的速度和质量,用法也比较简单。  最后提醒一下的就是, Smarty生成的缓存文件的扩展名虽然是php,但并不会被当作php代码来解析. 作者:那瞬间 。

最后此篇关于Smarty的配置与高级缓存技术分享的文章就讲到这里了,如果你想了解更多关于Smarty的配置与高级缓存技术分享的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com