smarty局部页面缓存

8月 3, 2008 – 9:59 下午

web2.0网站速度优化的最好方案是减少数据库访问.
缓存是减少数据库访问的最佳方案.
有两种最基本缓存的方式
1.页面缓存
1.1 如果你用的是smarty做为ui模板的话.页面缓存十分的方便

  1. require('Smarty.class.php');
  2. $smarty = new Smarty;
  3. $smarty->caching = 1;
  4. if(!$smarty->is_cached('index.tpl')) {
  5.     // No cache available, do variable assignments here.
  6.     $contents = get_database_contents();
  7.     $smarty->assign($contents);
  8. }
  9. $smarty->display('index.tpl');

以上为最基本的缓存方案,对于同一个tpl,根据不同的参数可以缓存多个.

  1. $smarty->is_cached('index.tpl',params); //根据参数判断
  2. $smarty->display('index.tpl' ,params);//根据参数显示

以上实现了整个页面的缓存
很多时候为了优化用户的体验,需要对局部即时显示.最方便的方案是对即时显示的部分做一下块标记.每次刷新时重新显示些块就可

  1. index.php:
  2.  
  3. <?php
  4. $smarty->caching = 1;
  5.  
  6. function smarty_block_dynamic($param, $content, &$smarty) {
  7.     return $content;
  8. }
  9. $smarty->register_block('dynamic', 'smarty_block_dynamic', false);
  10.  
  11. $smarty->display('index.tpl');
  12. ?>
  13.  
  14.  
  15. index.tpl is:
  16.  
  17. Page created: {'0'|date_format:'%D %H:%M:%S'}
  18.  
  19. {dynamic}
  20.  
  21. Now is: {'0'|date_format:'%D %H:%M:%S'}
  22.  
  23. ... do other stuff ...
  24.  
  25. {/dynamic}

官方介绍

1.2: 当然上面的smarty缓存只是把文件生成好的模板文件缓存在文件系统.更加高级的缓存方案是把文件静态化缓存到内存中.现在有很多此类工具.这里先不介绍.

2.数据缓存.
最流行的是memcache.


  1. 3 Responses to “smarty局部页面缓存”

  2. 有意思的网页缓存机制,一个问题:将数据缓存在本地的机制在提高访问效率的同时,会不会也增加了安全隐患呢? 这些缓存方案有什么相应的策略吗?

    [回复此评论]

    果沟 reply on 8月 18, 2008:

    yjpro可能有所误解,上面谈到的缓存是指把给用户显示的页面缓存到server机器上,不是本地.当用户访问的时候就像直接访问静态html一样(不用去查数据库,以及动态生成html).不是缓存在用户的机器上.所以安全上是没问题了.对于静态的文件很多浏览器本身也做了一些cache,比如ie,firefox会根据http头上指定的cache时间对文件做缓存,这样就减少了很多http请求.节约了网络资源,提高效率

    [回复此评论]

    By yjpro on Aug 17, 2008

  3. 是我搞错了, 受教:)

    [回复此评论]

    By yjpro on Aug 22, 2008

Post a Comment