Drupal专业开发指南 第15章 Drupal缓存(cache)(2)页面缓存

 

页面

                 译者:老葛 ESKALATE科技公司

我们前面讨论了很多,都是关于对站点的耗费资源的成分进行缓存的,但是Drupal最有效的缓存优化是对整个页面视图进行缓存。对于匿名用户,很容易做到这一点,这是因为所有页面对于所有匿名用户都是相同的。然而,对于登录用户,每个页面都是针对用户量身定做的。因此需要采用不同的缓存策略来处理这种情况。

对于匿名用户,Drupal可以使用一个简单的查询来取回缓存的页面内容,当然它需要一些其它查询以加载Drupal本身。对于匿名用户页面缓存,有两种缓存策略供你选择:普通模式和激进模式。当然你也可以禁用页面缓存。这些设置可以在Drupal后台管理接口Administer

Site configuration Performance中找到。在接下来的部分中,让我们看一下每种设置。

 

禁用模式

这将完全禁用页面缓存。通常在开发网站的时候使用。一般情况下,你需要启用页面缓存。

注意 即使禁用了页面缓存,Drupal仍对用户菜单、过滤后的内容、系统变量进行缓存。这些部件级别的缓存不能被禁用。

 

普通模式

与完全不使用缓存相比,普通模式对性能有巨大提升,因此它是对一个运行缓慢的Drupal站点提升速度的最简单方式之一。让我们仔细的看一下,当缓存系统的普通模式启用时,请求的生命周期。

为了理解页面缓存的普通模式,你首先需要了解Drupal的引导指令流程。引导指令流程由在Drupal称之为阶段的小的独立的步骤组成。在安装和更新流程中,Drupal就用到了将引导指令系统划分为多个阶段的优点,在这些流程中只需要加载需要的代码即可。对当前讨论,我们需要知道的是,系统在提供缓存页面时,只需要加载他所需要的代码和数据库链接即可。

 

15-1详细展示了为匿名用户请求提供缓存页面的流程。

15-1 本图展示了当Drupal处于页面缓存普通模式下为匿名用户请求提供缓存页面的生命周期。引导指令流程的前面5个阶段与缓存无关,用在这里仅仅是为了保持完整性。n*意味着在该处数据库查询次数是未知的。

在最开始,请求使得Web服务器执行index.php,index.php中的第一行PHP代码是用来包含文件includes/bootstrap.inc,该文件含有加载引导指令的核心函数。接着,index.php调用函数drupal_bootstrap()。

drupal_bootstrap()负责执行每一个引导指令阶段。对于普通模式缓存,我们只需要关心引导指令阶段DRUPAL_BOOTSTRAP_LATE_PAGE_CACHE就可以了。在该阶段,首先从数据库中取回系统变量。假定缓存策略是普通模式,接下来就是包含文件includes/module.inc了。module.inc内部的函数用来允许Drupal将模块系统放到线上。Drupal接着将初始化实现了钩子函数hook_init()或者hook_exit()的模块。通过分别调用bootstrap_invoke_all(‘init’)和bootstrap_invoke_all(‘exit’)来激活这些钩子函数。例如,统计模块,使用statistics_init()函数来追踪页面访问。节流阀(throttle)模块使用throttle_exit()函数来根据当前访问量改变节流阀值。

 

注意 在一个模块中使用hook_init()或者hook_exit()函数会为整个站点的性能带来负担,这是由于对于提供给访问者的每个缓存页面都需要加载你的模块。当你实现这些钩子函数时,可用的函数也受到限制,这是由于没有加载includes/common.inc。通用函数比如t(),l(),和pager_query()此时不可用。

 

Drupal_page_cache_header()通过设置HTTP头部来准备缓存数据。这场情况下,Drupal将设置Etag和304头部信息,这样浏览器可以使用它们自己内部的缓存机制,在应用时阻止不必要的HTTP循环请求。如果浏览器发送的头部信息已被请求过,那么就将缓存的数据方法送给浏览器。(译者注,我也没看懂这个函数是干什么的^_^)。

 

激进模式

激进模式完全绕开了对所有模块的加载;如图15-2所示。这意味着,此时对于缓存页面不再调用init和exit钩子函数了。由于不用加载模块,最终的结果是需要解析的PHP代码少了,需要执行的数据库查询也少了。如果你启用了使用这些钩子的模块(比如统计模块和节流阀模块),那么在激进模式环境下,它们可能不会像你预期的那样工作了。在后台管理接口页面Administer Site configuration Performance,Drupal会给出警告,指出哪些模块可能受到影响。

 

 

 

 

 

 

15-2 Drupal处于页面缓存激进模式下为匿名用户请求提供缓存页面的生命周期

 

最小缓存周期

该设置用来控制你的站点上的缓存内容最小缓存生命周期。当一个用户提交了新的内容时,他/她将立即看到变化;然而,其他用户只有在过了最小缓存生命周期以后,才能看到新的内容。当然,如果将最小缓存周期设置为“none”,每个人都能立即看到新的内容。

 

Fastpath:隐藏的缓存设置

缓存设置fastpath不能通过Drupal后台管理接口进行配置,,这是因为它的高级特性;fastpath使得程序员能够绕过Drupal实现一个高度定制化的缓存方案,比如内存或者基于文件的缓存;参看图15-3.

15-3Drupal处于页面缓存fastpath模式下为匿名用户请求提供缓存页面的生命周期

 

memcache模块(http://drupal.org/project/memcache)是一个基于内存缓存的例子,而fastpath_fscache模块(http://drupal.org/project/fastpath_fscache在)则是基于文件的。在sites/all/modules里面安装fastpath_fscache.module以后,我们将向你展示如何启用fastpath模式。

由于fastpath在默认情况下不需要数据库连接,所以要将所有的配置选项放在你的settings.php文件中:

$conf = array(

'fastpath' => 1,

'cache_inc' => 'sites/all/modules/fastpath_fscache/cache.fs.inc'

);

数组中的第一项用于启用fastpath模式。启用fastpath模式仅需这一行代码!第2项声明了fastpath_fscache将使用的定制缓存库函数。由于你是加载自己定制的缓存库函数来代替Drupal默认使用的includes/cache.inc库,所以你将需要编写你自己的cache_set(),cache_get()和cache_clear_all()函数。一旦启用了fastpath,它将覆盖由Drupal后台管理接口页面所做的任何缓存设置。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值