热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

经常在论坛和QQ群上听人说Drupal很慢,初始状态下承载不了多少数据量及并发,性能很差。但是我们可以发现很多大站也是用Drupal开发的,因为大站做了性能优化,包括硬件及软件优化,这里我们来讨...
经常在论坛和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的缓存技术有一个大致完整的认知,从而起到对性能优化的认知。


永久地址:

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

推荐阅读
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • Redis API
    安装启动最简启动命令行输入验证动态参数启动配置文件启动常用配置通用命令keysbdsize计算key的总数exists判断是否存在delkeyvalue删除指定的keyvalue成 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 基于分布式锁的防止重复请求解决方案
    一、前言关于重复请求,指的是我们服务端接收到很短的时间内的多个相同内容的重复请求。而这样的重复请求如果是幂等的(每次请求的结果都相同,如查 ... [详细]
author-avatar
何包蛋0727
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有