Home >php教程 >php手册 >Drupal的缓存技术应用-让你的网站飞起来

Drupal的缓存技术应用-让你的网站飞起来

WBOY
WBOYOriginal
2016-05-26 08:20:571905browse

经常在论坛和QQ群上听人说Drupal很慢,初始状态下承载不了多少数据量及并发,性能很差。但是我们可以发现很多大站也是用Drupal开发的,因为大站做了性能优化,包括硬件及软件优化,这里我们来讨论一下Drupal缓存技术。

所以,你不能说要彻底解决性能问题,但你可以根据实际情况,采用一些常用的解决方案来让网站的性能得到显著提升。我们常说的80/20理论你肯定知道,那么用20%的努力换取80%的性能提升,何乐而不为呢。

Drupal作为Web开源系统的一种,被称之为CMF(内容管理框架),拥有非常优秀的架构和扩展性,以及海量的第三方模块,现在已经被越来越多的人所熟知和采用。采用Drupal这样主流Web系统的一个好处就是有好多全世界优秀的专家投入到其中,给出各种各样的性能优化方案。我们大多数人作为使用者只要知道如何选择适合自己的优化方案,就能显著提升自己网站的性能。

前面说的都是性能优化,其实本文的重点是缓存技术,在我看来,对Drupal来说,缓存和性能优化基本就是同义词,大多数Drupal的优化技术都是使用各种各样的缓存。缓存有的是静态页面缓存,有的是动态缓存,有的是CSS,Javascript和图片的缓存。有的放在内存里,有的放数据库里,有的放磁盘上,还有的还需要配合一些服务器软件来提供。林林总总,对新手来说很可能就挑花眼了,所以本文想要在缓存这个话题上,给新手一些指引,本人学识有限,不可能面面俱到,希望读者可以批评指正。

核心缓存

作为最基本的优化手段,Drupal对缓存提供了一些基本的支持,比如外部的区块缓存,匿名用户页面缓存,内部还有比如菜单系统缓存,主题钩子注册表缓存等等。

可以说,作为一个不大的Drupal站点,使用核心内置的常规手段,性能就不会太差。多说一句,一般开发阶段是不开启缓存的,但一旦上线,区块缓存和匿名用户静态页面是必须要开的,CSS和JS也一定是要开启合并压缩的。这样一来,对于匿名用户,应该说速度就会比之前快不少。

Boost


Drupal 默认提供的匿名用户缓存是存在数据库里的,这意味着即使是缓存了的网页也要占用数据库连接和内网流量。而如果换成 Boost 模块,你的缓存都直接走静态文件,这不仅仅是不走数据库了,甚至都不经过Drupal了,所以作为页面缓存来讲 Boost 的效果极为出色。

Varnish HTTP Accelerator Integration

这里把 Varnish 模块列出来只是要告诉大家,如果你的服务器仍然有很大的内存,如果在前面使用 Varnish 服务器软件,你可以将静态网页缓存到 Varnish 开辟的内存中,可想而知速度就更快了。而且Varnish还可以帮助你缓存CSS,Javascript等静态文件。

Memcache API and Integration, Memcache Storage,Redis

Drupal的缓存技术应用-让你的网站飞起来

匿名用户的访问已经那么快了,那如果你的网站有很多活跃的登录用户怎么办呢,之前说的大部分缓存都将失效,这可如何是好呢,对于登录用户来说,最有效的就是使用 Memcache 让许多系统的内部缓存可以从内存中读取,从而得到更好的性能,并且 Memcache 本身还是可以分布式部署的,有很好的延展性。而最后一个 Redis 同样优秀,这里不会比较它们之间的优劣,只是建议你可以先从 Memcache 开始。

Memcache API and Integration和 Memcache Storage,你只需要一个,并且较为推荐后者。

APC - Alternative PHP Cache

Drupal的缓存技术应用-让你的网站飞起来

另一个能让登录用户感觉到快起来的技术就是 Alternative PHP Cache,也就是APC,他的作用就是让PHP文件不必每次都从磁盘加载,而是可以缓存到内存,并且是缓存的编译中间代码,所以对PHP语言的复杂系统来说优化效果很明显。这可以说是所有PHP网站必装的一个组件,当然他还有其他竞争者,比如eAccelerator, XCache以及最新的Zend Opcache等组件。不过再Zend Opcache组件没出现之前,APC在Linux系统上的表现略强于其他,而新出的Zend Opcache据说可以比APC还强上一些(10%以下),但同样,这里不做比较,只是建议你可以从 APC 开始。这里有一篇文章 (link is external)可以作为你的延伸读物。

另外,如果我们紧紧是使用APC的代码文件Opcode缓存特性,是不需要APC这个模块的,这个模块提供的是存一些额外的数据缓存到APC,这样我们就能够做到一部分不经常改变的cache表放到APC,经常改变的cache表放到Memcache,另外一些大的缓存表则需要放到数据库中。

Entity cache

接下来要做什么呢,因为本文是基于 Drupal 7 的,Drupal 7 引入了 Entity 的概念之后,Drupal中就有了各种类型的 Entity,所以这个模块提供的缓存支持,会让你的登录用户感觉到快了一点点,并且无需配置,且对几乎所有的Drupal站点都生效。

另外,像这种和Drupal内核机制以及常用第三方模块相关的模块在官网还是有不少的。拿Views举例,比如Views Row Cache模块和Views content cache都为Views提供了不同逻辑的缓存机制。我们可以根据实际情况取舍这种类型的模块,毕竟模块装多了也慢。

Authenticated User Page Caching (Authcache)

 Drupal的缓存技术应用-让你的网站飞起来

然后,我们就要说说更理想的登录用户缓存问题了,如果页面是动态生成的,我们再怎么做缓存,性能上也比不过直接缓存成静态页面,那么有办法么? Authcache 模块可以在一定程度上帮到你,但要注意的是,登录用户缓存的情况非常复杂,我们在采用 Authcache 模块之前要想好适不适合自己。

举个例子,如果你做一个SNS网站,你觉得登录用户的页面不够快,如果你开启了 Authcache 模块。你就要想那些页面对用户来说是完全一样的,这样一定可以缓存,哪些页面大部分一样,只有一小部分是根据用户的不同而不同,这种对于Authcache的处理来说就要复杂一些。那么如果是像新鲜事这样的页面,你也要缓存,这对每个用户来说都是不一样的,那就意味着你要缓存页面的数量级是用户ID乘以URL数再乘以角色数,想想这样产生的缓存会占用多大的空间,真的可行吗?。

关于 Authcache 模块说了这么多,就是要提醒大家,选择 Authcache 要非常慎重,不是它不好,而是有可能不适合你。

CDN

Drupal的缓存技术应用-让你的网站飞起来

页面的打开速度和很多因素有关,其中一个很重要的因素就是CSS和Javascript文件的下载速度。而用户与服务器之间线路的物理距离又会对此产生很大的影响,所以我们需要CDN(内容分发网络)技术的帮助,让用户可以就近访问网站资源文件的缓存版本。CDN不仅让你的网站打开速度变快,由于其还为你的网站分担了流量和连接数,所以你的网站可以支持更大的并发访问了。

CDN模块可以帮你配置,让你的CDN生效,注意一般对CSS和图片使用CDN完全没有问题,但Javascript则要注意,如果所有的Javascript代码都用CDN,可能会产生安全隐患以及用户体验等问题。

Cache Warmer


最后,再说一说缓存重建的问题,既然是缓存,那么最开始的时候是没有的,是随着用户的访问,一点点的生成的,所以用户首次访问的时候,就会觉得网站仍然很慢,假设你的网站页面非常的多,那么就会有很多用户觉得你的网站慢,甚至不再访问第二个页面就流失掉了,所以在每次清缓存之后(实际上Drupal清缓存的频率是很高的,尤其是长期迭代开发和运营的Drupal站点)我们需要为重要入口页面重建缓存,以提高访客的停留时间,降低跳出率。

Cache Warmer就是这样的技术,和爬虫的思路相比,其更有目的性,比如重要的入口页面,网站新增内容,网站热门内容等等。不过使用这一技术要注意量力而行,别在重建缓存的时候自己把自己的网站弄瘫痪了。

小结

Drupal缓存相关的模块相当多,我们可以根据项目的实际情况调研和使用。本文按照由浅入深顺序介绍了Drupal网站的各种常用缓存技术,可以让大家对Drupal的缓存技术有一个大致完整的认知,从而起到对性能优化的认知。

 


永久地址:

转载随意~请带上教程地址吧^^

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn