drupal7 boost模块为登录用户提供缓存

这段时间研究Drupal7的缓存相关,看了好多资料,都提到了boost和authcache两个模块,今天来说一下boost。

      具体的下载安装,配置等,官网写的听清楚,boost模块地址 ,安装配置方法:Boost Handbook for Drupal 7.x

先建大说一下boost的原理,它本身只为匿名用户提供缓存,因为匿名用户看到的页面都是一致的,的缓存方式也很简单粗暴,但是也十分高效,就是直接给存成html静态页面作为缓存,下次访问时,不去走drupa的一大堆流程,如果命中缓存,直接就返回静态页面,是不是很爽?不用访问一系列的函数和数据库,直接返回html页面,难道还有比这更快的?(当然boost模块相关的一些函数和一些drupal必要函数还是要走的,因为boost毕竟还要根据url和用户角色来判断是不是要缓存这个页面等)。

     可是我又想让它对已登录的用户也起效果,怎么办,啃了半天源码,找到了:

/**
 * Implements hook_boost_is_cacheable().
 *
 * TODO support for node types, etc.
 *
 * @param $parts
 *   info about this request
 * @param $request_type
 *   if the request_type is "status", we assume that this is being
 *   called from the admin status block. Since the user must be
 *   logged in to view this block, we do not return false.
 *
 * @return $parts
 */
function boost_boost_is_cacheable($parts, $request_type = 'normal') {
  global $user; 

 if ($user->uid != 0 && $request_type != 'status') {//重点!!!
    $parts['is_cacheable'] = FALSE;
    $parts['is_cacheable_reason'] = 'Boost only works for anonymous users.';
  }
  else {
    $parts['is_cacheable'] = TRUE;
  }
  debug('1');
  return $parts;
}

看到了吗,由于有hook_boost_is_cacheable()这个钩子,所以呢,boost在判断是否为这个页面进行缓存的时候,以角色作为依据的代码就是这样了,当然角色只是一个判断的维度,但是对我的需求已经足够了。 直接修改判断条件为:if ($user->uid != 1 && $request_type != 'status')。

为什么是修改为“$user->uid != 1”,因为1是指超级管理员,没必要为了个位数级别的人去添加缓存,浪费硬盘资源,没有任何意义。排除了超级管理员,剩下的角色就是匿名和注册用户了,是不是很爽?

当然了,有人会问,那不同的角色,看到的页面内容肯定是不同的呀,就算缓存了,也不符合“不同人浏览,看到不同信息”的实际需求啊。

到目前为止是这样的,我目前的解决方案是使用一个模块:ajaxblocks,通过它把不同的block区块通过ajax加载,就行了,这样,不同角色获取不同信息就交给后台对block的处理了。

但是,又有一个问题,没有对数据缓存,这需要memcache模块,不过我还没有研究,后续再补上吧。

怎么样,我的解决方案可行性如何?希望大家指教~

posted @ 2017-01-16 17:38  jiafeng  阅读(449)  评论(0编辑  收藏  举报