如何改善Drupal7网站的性能?[关闭]


10

对于Drupal的新手来说,我看到Drupal Caching上有很多可用资源,但是我不确定要使用哪个资源。


1
我们可以讨论是否要在meta上对此进行规范的问题,但是我仍然认为它太广泛了。而且性能改进可能是非常上下文相关的,并且不是在真空中完成的。
mpdonadio

Answers:


26

这些是我的经验记录,可能与其他人的经验有所不同。我主要使用LAMP堆栈,并在建议中考虑了相同的问题。

我通常遵循的Thumb缓存规则。

  1. 处理一次即可使用多次。
  2. 尽可能使用过时的数据
  3. 很少清除高速缓存,并使其非常具体。
  4. 如果可能,请在堆栈的最低级别进行更改。LAMP-DCCc:Linux,Apache,Mysql,PHP,Drupal Core,Contrib和自定义模块。

改善Drupal网站的性能(按复杂度递增的顺序)

  1. 保持核心更新,贡献模块和主题更新。是的,这很重要。

  2. 在您的服务器上安装APC。(根据Letharion的建议移至顶部)

  3. 页面缓存:admin / config / development / performance 最小缓存生存时间与缓存页面过期之间的差异

  4. 块缓存https://drupal.org/project/blockcache_alter所有块的缓存选项。
  5. 汇总JavaScript和CSS文件-前端改进 https://www.drupal.org/project/advagg
  6. 禁用不必要的模块。每个模块都会增加页面加载所需的代码量。并且它还会增加查找次数。尽可能使用通用模块代替执行特定功能的多个模块。
  7. 缓存视图内容-内容感知的视图缓存 https://www.drupal.org/project/views_content_cache
  8. 禁用数据库日志记录-使用https://drupal.org/project/syslog_ng
  9. 减少404错误-http: //www.brokenlinkcheck.com/
  10. 快速404响应-https ://drupal.org/project/fast_404-​​尝试在服务器级别进行处理。
  11. 客户端验证-https: //www.drupal.org/project/clientside_validation
  12. 压缩图像-https://www.drupal.org/project/imageapi_optimize
  13. 延迟加载图像-不要加载不必要的图像-https: //www.drupal.org/project/lazyloader
  14. 使用精灵表格-https: //www.drupal.org/project/spritesheets

  15. 将“最小高速缓存生存时间值”设置为更高的数字,并使用高速缓存清除模块清除特定页面的高速缓存- 每当我编辑/更新节点时,匿名用户的所有页面高速缓存都会丢失

  16. 使用开发模块监视查询。
  17. 重写视图查询/如果过大,则避免使用视图。
  18. XHProf- https: //www.drupal.org/project/XHProf
  19. FPM,HHVM。
  20. 数据库分析和调整-https: //www.drupal.org/project/dbtuner
  21. 使用Boost,如果不需要,不要引导数据库。 https://drupal.org/project/boost对于大多数中小型网站,Boost足够好,您可能不需要反向代理。
  22. 使用CDN- https: //www.drupal.org/project/cdn 易于设置。
  23. 如果您的缓存表很大,请使用Memcached-如果您可以安装memcached并为其设置RAM,那么它听起来并不复杂。
  24. Etags-正确配置Etags。 https://developer.yahoo.com/blogs/ydnfiveblog/high-performance-sites-rule-13-configure-etags-7211.html
  25. 使用反向代理服务器 -清漆(至少需要资产)。如果您的大多数用户都是匿名用户,则很有帮助。
  26. 压缩传输-启用gzip压缩
  27. 保持活动状态-尽可能使用持久连接。
  28. 渐进式JPEG-
  29. 用代码进行培训-Eaton的博客很棒。 http://www.lullabot.com/blog/article/beginners-guide-caching-data-drupal-7
  30. 实施缓存预热-https: //www.drupal.org/project/cache_warmer-缓存在最终用户点击页面之前对页面进行预热。
  31. 主从数据库配置-https: //www.drupal.org/project/autoslave使您更容易设置一个。
  32. 数据库集群-https: //stackoverflow.com/questions/1163216/database-cluster-and-load-balancing
  33. 负载平衡器-http: //en.wikipedia.org/wiki/Load_balancing_(计算)
  34. 使用启发式缓存预热-https: //www.drupal.org/project/cache_graceful
  35. 经过身份验证的用户缓存-https: //www.drupal.org/project/authcache

2
很好的答案,但对我来说很重要的一件事是,您的顶部没有APC。APC非常容易实现,没有缺点,而且收益确实很大。我认为它应该到顶部。(也许有一条评论说,PHP 5.5之后就不需要了,因为最终集成了优化)
Letharion 2014年

1
也许还提到一些最简单的缓存方法?如果您的站点主要需要静态内容(所有用户的页面都相同,因此无需登录),那么Varnish或Boost会带来最大的收益。
多米尼克·伍德曼


3

作为Gokul的答案的伴侣,这是我考虑要在Drupal中缓存的内容的方式(不按复杂性排序):

缓存意味着加快重复活动。

Drupal网站涉及的主要重复动作是:

  • 调用网页
  • 运行PHP代码以构建网页
  • PHP从数据库调用项目

缓存整个网页

找到一种无需运行PHP代码或调用数据库即可缓存整个网页的方法,即可获得最大的缓存收益。

您可以使用VarnishBoost进行此操作。用户调用页面时,他们无需进行计算就返回页面的副本。

但是,如果页面的某些部分必须不同(例如,用户登录并且其名称显示在顶部),则此方法将无效。

为了使它起作用,您需要研究Authcache。

PHP缓存

您可以使用APC缓存PHP ,或者如果您具有5.5或更高版本,则将内置另一个缓存。

这是在服务器端完成的,这意味着将记住您的PHP代码的大部分。您正在为Drupal缓存PHP,但是从技术上讲,您并未与Drupal进行交互。

数据库缓存

从数据库获取信息的调用非常昂贵。

最常见的数据库缓存机制是memcache

这会将数据库对象缓存在RAM中,因此您无需从硬盘驱动器上调用数据库对象,而只需将其从RAM中拉出即可,这要快得多。


1
Redis还是一个出色的内存缓存存储区,根据我的经验,它至少可以与内存缓存相提并论(尽管内存缓存可能会在集群中胜出)
Clive
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.