Drupal速度慢,似乎成了很多人的共识。服务器或网站存放空间的速度,文件、图像及媒体文件的物理尺寸,文件、图像及媒体文件的数量,启用的模块数量,站点上运行的其它程序脚本等是导致Drupal网站缓慢的几类主要原因。如果优化得当,drupal速度是一点也不慢的。
一、修改php的配置文件php.ini
1.启用并设置realpath_cache_size=1280K(大小可自定义设置);
2.启用并设置memory_limit=5048M(默认是128M);
二、配置数据库配置文件my.ini
1.启用skip-innodb相关文件,即删除其前面的#号;
2.启用并设置innodb_flush_log_at_trx_commit=0;
修改配置文件之前要先做好备份,防止修改后导致一些异常的发生,必要时可以快速恢复。
三、启用缓存
通过访问“管理>配置>开发>性能”(admin/config/development/performance)页面可进行Drupal内置的性能优化设置。
这个页面看到的所有选项都可以勾选。这些缓存设置只对匿名用户(未登录用户)有影响,如果站点更新并不频繁,可以将缓存时间设置得长一些。缓存区块可以避免在每个页面加载区块时都要对其进行重建。区块在很多Drupal站点中被大量使用,因此对其它进行缓存会很有帮助。
启用区块缓存也有一个缺点,即如果你修改了其中的内容,直到达到最小缓存周期(Minimumcachelifetime)前,匿名用户将不会看到区块中内容的变化。当然你可以点击“清空所有缓存”按钮,让修改能够立即被看到。
四、带宽优化(BandwidthOptimization)
部分设置对匿名用户和登录用户同样都有影响,通过减小文件的大小、将多个文件进行合并以减少浏览器的请求数量,这些设置可以让网站加载更加快速。
五、禁用不必要的模块
Drupal在每个页面加载时都会做什么?它会检查每一个模块,确认它们是否要向当前页面中添加一些内容。如果网站上有100+个模块,可能会让你有些痛苦。通常,启用一个模块能够获得一些简单和便利的功能,但这其实是一项交易,你是希望拥有更快的站点还是更方便的体验?
可以通过禁用以下这些模块来提升网站速度:Blog、Forum、Taxonomy、Search、Help、Shortcut、Dashboard、DatabaseLogging、FieldUI、Color、Toolbar、Tracker、Statistics。
同样的,如果网站中有以下模块,也可以禁用掉:UpdateManager、AdministrationDevelopmenttools、Devel、Develnodeaccess、RuleUI、ViewsUI、ModuleFilter。
开发和管理常用的Drupal模块在线上站点都可以删除和移除,用于辅助管理的UI类模块,可根据使用需要进行禁用。
六、启用Views缓存
如果你的站点上有Views模块,在没有禁用ViewsUI模块的情况下,你可以通过Views管理界面启用Views缓存。
Views是将数据从数据库中拿出来以各种方式展示的好办法。有时因为Views中包含大量信息,需要经历的工作和时间会比较长。因此,当包含Views的页面进行加载时,每次都要再重复相同的查询工作。通过启用Views缓存,Views可以为其所要显示的内容只进行一次查询,便可在指定的时间周期内(或其它条件规则下)直接显示,而不需要每次都经历复杂的查询。这对页面加载速度将会有巨大的提升。
七、对图片进行优化
在“管理->配置->媒体->图像工具包”中设置图片压缩品质的百分比,通过控制图片质量来加快显示速度;
八、使用CDN
要想使页面加载较快,必须使用CDN。下载https://www.drupal.org/project/cdn模块,安装即可使用。
九、使用静态页面缓存(Boost模块)
静态页面是最快的,没有之一!
因此,静态页面缓存是最佳选择,尽量把页面动态的部分独立处理,用ajax/iframe调用,整个页面是静态页面,部分用ajax刷新(当然用shtml也可以)。
Boost模块经过稍微调整和修改,可以设置某些Roles(比如一般认证用户)也读取静态缓存(apache/nginx的rewrite),并且可以很好的工作在Apache和Nginx上面,并使某些角色,比如管理员,不读取静态页面。对于一个普通网站,90%以上的都属于普通认证用户和匿名用户,因此,经过这样修改可以大大提高性能。
Boost模块地址:https://www.drupal.org/project/boost
十、使用Drupal的Pressflow版本
Drupal本身没有太多考虑性能的优化,Pressflow是一个专门针对Drupal的优化版本,包括支持MysqlMaster-Slave等等。对于大型网站,选择Pressflow是必须的。
http://pressflow.org/
十一、服务器
Web服务器推荐使用HAProxy/Varnish作为前端代理,Nginx作为Web服务器,php-fpm作为FastCGI处理PHP程序,当然也可以使用Apache作为PHP后端处理,但是不推荐使用apache作为Web节点服务器。Drupal有一个Varnish相关的模块https://www.drupal.org/project/varnish
十二、opcode
Drupal需要load相当多的PHP文件,所以opcode是必须的!
实践证明eAccelerator比APC和xCache好一点,注意:APC的某个版本在NFS环境下有bug,不能正确缓存,所以建议使用eAccelerator。
十三、数据库结构合理、分表、分库
不要使用content-profile模块。该模块把profile信息存储成一种node-type,这样会导致node表比较大,但是profile的node除了uid之外其他都是无用信息。假如一个网站有上百万、千万用户,再有很多文章(node),这样node表将会非常大,尤其是一个user有很多profile的node,比如5个,这样node表就会有5倍的user数量的node。导致查询node、user都没法处理,views之类的工具更是没法用,因为views生成的SQL将会非常慢。把user相关表分到独立的数据库,这样可以方便其他站点,比如子站,共享用户信息。
对于大型网站,不推荐使用太多第三方模块,大多模块都是基于node,如果跟node没有关系的独立数据,建议自己写模块来读写,这样方便数据的拆分和优化,又减轻了node表的压力。所以再使用模块前,必须了解模块的工作机制。