You are here

drupal页面缓存的工作原理

g089h515r806 的头像
Submitted by g089h515r806 on 星期三, 2008-10-29 07:51

      先纠正一个错误,那就是”实验”应该改为”试验”,小时候语文不好,经常被老师批,幸好现在有了网络,遇到不明白的地方可以到网上搜搜.

    前面又发了一篇文章,当我以用户g089h515r806和test用户登录后访问时,在首页,看到了刚刚发出去的两篇文章。drupal缓存(cache),和缓存试验

 

   现在我以匿名的什么,使用google的chrome浏览器,再次访问zhupou.cn的首页。我看到的 和前文中所截的图还是一样的。使用同样的方法,访问zhupou.cn/node,令我意外的是,我看不到刚刚发的“缓存试验”。只有drupal缓存(cache)。而登陆用户是可以看到两者的。

 

    问题又来了,为什么匿名用户第一次访问zhupou.cn/node,能够看到最近发布的文章“drupal缓存(cache)”,当再发布一篇“缓存试验”后,再次访问zhupou.cn/node,看不到刚刚发布的“缓存试验”一文呢?这是个问题。也是初学个,经常遇到的问题,我多次看到有人问,为什么看不到新发的文章,这样的问题。

 

   你可以按照我说的方法,对drupal缓存的设置多做一些实际的试验,用试验来了解掌握drupal缓存机制。对于使用缓存与不使用缓存的drupal性能对比实验,我就不做了,因为这是“实验”,而不是“试验”,因为我的技术层次还比较低,达不到“实验”的水准。不过可以大致的给出一个数据,那就是开启页面缓存后,性能大约有10倍左右的提升。

 

   下面让我给大家讲解以下,drupal页面缓存的原理,这既是我从他人的经验中学习过来的,也是通过自己动手,逐步的体味出来的。我也希望,drupal的学习者,使用者,在自己用到缓存的时候,像我这样用不同的浏览器,使用不同的用户类型,不断地试验,查看结果,这样就能够更加深刻的理解drupal页面缓存的工作原理。

 

   启用页面缓存后(普通模式),事实上在缓存中,这个页面还不存在,当有一个用户访问这个页面时,也就是页面的第一次被外界访问,这个时候还是走的完整的步骤,在页面从服务器端发送给浏览器的同时,drupal也将这个页面缓存到了drupal缓存中,这个缓存页面有个最小的生命周期,也就是最小的存活时间,在这一时期内,不管哪个用户再次访问这个页面,不管这个页面期间有没有被修改,对于匿名用户来说,返回的都是同样的内容。当过了生命周期之后,如果你启用了cron任务,系统就会帮你把这个缓存页面从drupal缓存中清除出去。只有当下次,再有用户访问这个页面时,重新生成缓存页面。对于缓存页面,只需要一条SQL语句,就可以将其从缓存表中读取出来。

 

       如果你了解到了这一原理,就不难理解上面看到的现象,匿名用户访问zhupou.cn/node,这是因为这个路径从来没有被访问过,所以第一次,他看到了最新的内容,当再有更新时,看到的仍然是前面看到的内容。由于drupal大量的使用缓存,缓存表中的数据,会逐步地增加,所以你需要配置你的cron任务,让它帮你定期的清除过期的缓存页面,很多人会慢慢的发现,性能越来越慢,就是因为缓存表中的数据量太大了,里面的垃圾数据没有清除导致的。

 

   6个小时以后的试验,这里就不再作了,因为今天匿名用户可以看到昨天晚上发布的内容了。我们接下来看看区块缓存,以及css,js的优化。

相关链接: Think in Drupal

Drupal版本: