2011年6月27日星期一

虚拟主机上的Drupal性能优化


默认情况下,drupal的性能往往为人诟病。就算安装在本地电脑时,你也可以感觉得到它反应的迟钝。不过好在安装了一些模块和进

行相应的设置后,drupal网站的性能会有显著的提升。

在虚拟主机上我们对服务器没有控制权,不能安装APC、memcache之类应用,至多只能配置.htaccess文件。所以这篇文章主要是介绍

一些drupal模块来提升性能。



前端优化

前端优化可以按照yslow或Google Page Speed的建议来进行。

更小的文件尺寸,更少的组件数量,更多的并行通道。

.htaccess

如果你服务器不是Apache或者你没有配置.htaccess的权限,你可以跳过这一部分。通过配置.htaccess文件在服务器级别进行一些优

化是前端优化的理想选择。

添加Expires头(或Cache-control)。drupal根目录下自带的.htaccess文件中已经添加好了Expires头:
view sourceprint?
1 <IfModule mod_expires.c>
2  # Enable expirations.
3  ExpiresActive On
4  # Cache all files for 2 weeks after access (A).
5  ExpiresDefault A1209600 
6 <FilesMatch \.php$>
7    ExpiresActive Off 
8 </FilesMatch>
9 </IfModule>
Gzip各组件。一般需要压缩的是文本文件,如:HTML、CSS、JS、XML和JSON。在.htaccess中加入下面的代码就可以在启用apache的

Gzip或者deflate模块了。
view sourceprint?
01 <ifmodule mod_deflate.c>
02 AddOutputFilter DEFLATE html xml php js css
03 </ifmodule>
04 <ifModule mod_gzip.c>
05 mod_gzip_on Yes
06 mod_gzip_dechunk Yes
07 mod_gzip_item_include file \.(HTML?|txt|CSS|js|PHP|pl)$
08 mod_gzip_item_include handler ^CGI-script$
09 mod_gzip_item_include mime ^text/.*
10 mod_gzip_item_include mime ^application/x-JavaScript.*
11 mod_gzip_item_exclude mime ^image/.*
12 mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
13 </ifModule>
Etag。一般的建议是去掉或者修改etag,但是在普通的虚拟主机上,情况要简单得多,保留默认的etag即可。
核心模块

在admin/settings/performance中启用优化CSS和JS。drupal核心会将众多CSS文件合并一个文件,并且将其压缩(去掉注释、空格等

多余字符);对JS文件,会合文件但不会将其压缩。

如果你没有用.htaccess在服务器级别上启用Gzip,那么可以在admin/settings/performance中启用Gzip page compression(Gzip压

缩页面),这同样会将drupal的输出的HTML页面用Gzip压缩,达到减小页面尺寸的目的。

CSS Gzip和Javascript Aggregator

CSS Gzip和JavaScript Aggregator可以在php级别上用Gzip压缩CSS和JS文件,会极大地减小样式表和脚本文件的尺寸。如果没有

在.htaccess中用 gzip压缩css或js,可以在admin/settings/performance中启用它们。

JavaScript Aggregator另外的一个独特而重要的功能是用JSMIN/JSMIN++压缩JS脚本(去注释空格等多余字符)

parallel

一些较新的浏览器的HTTP并行请求数都超过了4,但网页上各种外挂组件的数量大部分时候都远远超过了这个数量。CDN(Content 

delivery network)可以很好的解决这方面的性能问题。不过这里要说的是parallel模块,parallel并不要求真正的CDN,他可以将

网页上的图片、样式表、脚本改为从子域名下载,从而在效果上与真正的CDN类似。

使用parallel的唯一要求是你可以将你的子域名指向主域名所在的服务器。

CSS SPRITE,进一步减少HTTP请求数

经过上面几步,已经将js和css文件数量减到最少了,剩下的可能就是主题中众多零碎的图片了。将这些图片合成CSS SPRITE是必要

的,SpriteMe是个生成CSS SPRITE不错的工具。当然更多的情况下,是需要自己动手来制作CSS SPRITE的。

各版本浏览中最大http并行请求一览表:

浏览器 HTTP/1.1 HTTP/1.0
IE 6,7 2 4
IE 8 6 6
Firefox 2 2 8
Firefox 3 6 6
Safari 3,4 4 4
Chrome 1,2 6 ?
Chrome 3 4 4
Opera 9.63,10.00alpha 4 4
 

服务器端优化

将缓存进行到底。

Boost

boost将动态的php页面在服务器上生成对应的静态的HTML页面,再有用户访问的时候,就会直接访问这些HTML页面,完全省去了php

执行、数据库查询的步骤,可以极大地提升访问速度。不太完美的是boost只对匿名用户有效,登陆用户总是获得的动态内容。

默认的boost不会对非英文路径的页面生成HTML缓存,使用pathauto模块的需要在admin/settings/performance/boost中禁用Only 

allow ASCII characters in path选项。

Cache Router

cache router提供了整合例如像APC、Memcache、 db、file等缓存技术,在虚拟主机上apc和memcache我们不能随意安装,但是我们

可以用db和file来缓存。db缓存是drupal自带的 功能;而把缓存记录在文件系统上,省去初始化数据库连接过程,可以明显的提高

性能。要启用file缓存,安装并启用cache router后,将以下代码加在setting.php中即可

view sourceprint?
01 $conf['cache_inc'] = './sites/all/modules/cacherouter/cacherouter.inc';
02 $conf['cacherouter'] = array(
03  'default' => array(
04    'engine' => 'file',
05    'servers' => array(),
06    'shared' => TRUE,
07    'prefix' => '',
08    'path' => 'sites/default/files/filecache',
09    'static' => FALSE,
10    'fast_cache' => TRUE,
11  ),
12 );
Authcache

核心的缓存系统和Boost的缓存都是针对匿名用户的,而authcache模块则是针对注册登录用户的缓存模块,并且authcache可以方便

的和cache router结合起来使用。

在setting.php中加上

view sourceprint?
1 $conf['cache_inc'] = './sites/all/modules/authcache/authcache.inc';
然后启用authcache模块,在admin/settings/performance/authcache/config中对相应的角色启用cache即可。另外,如果页面中有

为不同用户定制的内容(如在页面中显示的用户名),你需要在特定的主题页面中进行修改。

authcache可以对匿名用户启用,但是如果你用了boost,在authcache上启用对匿名用户的缓存是没有必要的。

Block Cache Alter

block cache alter为各区块提供了一个缓存选项,可以方便对所有用户缓存区块的内容。

合适的组合

如果网站没什么注册用户,一个Boost模块足够;注册用户访问较多,cache router+authcache是比较合适的;或者你也可以同时启

用Boost+cache router+authcache。

详细的,可以参考drupal.org上关于性能的网页:

Modules for browser performance
Caching: Modules that make Drupal scale
Modules for performance

没有评论:

发表评论

上海松善实业有限公司

    上海松善实业有限公司是一家集多品牌销售于一体的电线电缆骨干企业,公司成立于2016年。 公司拥有国内各大品牌:起帆、远东、上上、江南、胜华等。     主要产品有:高低压电力电缆、橡套电缆、控制电缆、架空绝缘电缆、塑胶电缆、电子计算机电缆、通讯电缆、...