您如何提高Drupal的性能?


54

Drupal的开发速度很快,但是性能却很差。每秒很难达到50个请求。

在一个简单的网页中有很多SQL查询。如果您在Drupal.org中测试提交表单的请求时间,则总是需要几秒钟才能完成。

您如何提高网站速度?


3
您实际上搜索过该网站吗?我无法想象这没有被重复讨论过。
Letharion 2012年

1
签出我的幻灯片goo.gl/30yi39应该会对您有所帮助
mikeytown2 2014年

Answers:


61

缓存,缓存和缓存。

我之前对类似问题做了一些建议

  1. 在您的http-deamon前面放置Varnish或其他反向代理可能是您唯一可以做的最好的事情。
  2. 在DrupalCon Copehagen期间,Rasmus表示使用php操作码缓存(例如APC)是通常可以提高PHP速度的最佳方法之一。使用新版本的PHP可以提高性能。升级Drupal时,升级PHP还有其他好处。从6到8,Drupal将朝着面向对象的方向发展,这也是大多数性能改进都发生在较新的PHP版本中。
  3. 通过将缓存放入内存而不是磁盘,Memcache是加快缓存的流行选择。
  4. 面板 +高速缓存与高速缓存操作相结合可以显着提高性能,即使对于已登录的用户也是如此,因为它支持相当复杂的逻辑。
  5. 对于使用Drupal 7的任何人,实体缓存都是不错的零配置速度提升。
  6. 大量写入的站点具有更少的“完善”解决方案。一些选项包括。
    1. 经常将经常写入的内容(例如统计信息)完全转移到其他地方(例如Google Analytics(分析))。
    2. 使用NodeJS之类的自定义解决方案缓存频繁的写入操作,该解决方案每X秒写入一次DB。
    3. 牺牲神圣的ACID,并使用MongoDB之类的数据库。(请参阅下面的Berdir评论)
    4. 群集您的SQL数据库。Do从一个数据库读取,然后写入另一个数据库。这是D7的本机,Pressflow可以在D6中提供帮助。

所有这些都已添加,但是所有这些都是用于读取缓存的,不利于具有大量写入操作的站点。
Bruce Dou

您没有说出关于写入的任何具体信息。:)我将在答案中添加一些内容。
Letharion'3

1
关于MongoDB的澄清。您不能将完整的数据库切换到MongoDB。MongoDB与MySQL这样的DBMS完全不同,例如,它不使用SQL。您只能替换某些可插拔组件,并使用它们将部分数据存储在MongoDB中,例如字段,日志,块等。
伯迪尔2012年

@Letharion >>群集您的SQL数据库。Do从一个数据库读取,然后写入另一个数据库。Pressflow可以帮助您。如何实现呢?
2012年

1
好答案!确定的。除此之外,请看一下高级CSS / JS聚合模块,因为我的理解是聚合可以减少对单个CSS和JS文件的请求,从而有助于提高性能。
therobyouknow 2013年

23

这些是我的经验记录,可能与其他人的经验有所不同。我主要使用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. 使用Sprite Sheets- 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

重新发布我为drupal.stackexchange.com/questions/118990/…编写的答案。顺便说一句,它是封闭的,说它太广泛了。我不确定这两个问题是否有很大区别:)
Gokul NK 2014年

18

Boost模块也非常有用,它从您的网页创建静态文件缓存。它主要用于具有大量匿名用户流量的网站。

Boost为Drupal提供了静态页面缓存,从而为那些主要接收匿名流量的站点提供了非常重要的性能和可扩展性。对于共享主机,这是提高性能的最佳选择。在专用服务器上,您可能需要考虑使用Varnish。

完全支持Apache,同时半支持Nginx,Lighttpd和IIS 7。Boost将缓存并gzip压缩html,xml,ajax,css和javascript。Boosts缓存过期逻辑非常先进;在站点的不同部分具有不同的缓存生存期非常简单。内置的搜寻器可确保快速生成过期内容,以快速加载页面。


1
Boost现在对Drupal 7的效果非常好。在共享托管解决方案上,这是一种绝佳的选择(例如,他们通常不允许Varnish)。
Sage 2015年

5

值得一提的是,如果您使用的是SQLIte数据库驱动程序,则可能必须禁用磁盘同步。

/**
 * Implements hook_init().
 */
function HOOK_init() {
  db_query('PRAGMA synchronous = OFF');
}

在某些服务器配置上,它将大大提高性能。


2
由于这会在每次页面加载时禁用它,所以我在想是否有更好的方法来永久禁用它。应该花一些时间检查一下。
Gokul NK 2015年

1
通过在$ databases数组中添加一个'init_commands'元素,可以在sites / default / settings.php中进行此操作。我在这里找到了“ PRAGMA同步= OFF”的示例:bitacoles.enging.com/node/210
dinopmi

4

Drupal性能的秘诀在于缓存和遵循良好实践。意见建议:

Drupal后端

  • 在“ 性能”部分中启用缓存。
  • 检查性能以及性能和可伸缩性清单模块。
  • 检查Drupal 7性能优化选项和清单
  • 禁用未使用的和非生产的模块(例如Devel,Views UI,Rules UI等)。
  • 禁用不稳定的模块。
  • 禁用统计信息
  • 禁用dblog核心模块,并替换为syslog
  • 禁用Update Manager核心模块。
  • Cron:使用Drupal的内置cron,而不要使用差劲的cron(考虑ElysiaUltimate cron)。
  • 视图:将缓存用于不同层上的视图(数据库查询,标记,基于时间)。
  • 块:如果您的视图是块(按页面,用户等),请使用块缓存。
  • 块:考虑通过块高速缓存更改模块调整每个块的高速缓存设置。
  • 面板:尽可能使用缓存(对于D7,请检查PCCPHC模块)。
  • 实体:启用实体缓存
  • 当使用多个环境时,请考虑缺少模块,这可以改善页面加载。
  • 使用Authcache模块启用经过身份验证的用户页面缓存。
  • 避免重定向会减慢用户体验。
  • 通过使用Expire模块增强缓存失效。
  • 在生产之前使用PHP性能分析(例如XDebug)。

Drupal前端

  • 通过以下方式最小化HTTP请求:
  • 考虑将一些JavaScript和CSS设为外部(在某些情况下更快)。
  • 缩小JavaScript和CSS(请参阅:Speedy模块)。避免内联。
  • 引用JS时,请使用deferasync属性。
  • 减少iframe的数量。
  • 优化图像,字体,CSS Sprite,使favicon小型可缓存并减小cookie的大小。
  • 减少DOM元素的数量,并缓存对已访问元素的引用。
  • 通过使用“ 快速404”模块使404页面的加载速度更快。
  • 使用Advanced CSS / JS Aggregation启用前端资源聚合和缓存。
  • 将样式表放在顶部,将脚本放在底部。
  • 添加ExpiresCache-Control标头,还添加ETag以减少响应。
  • 使用GET for AJAX并使其可缓存。
  • 预加载和后加载组件可以利用浏览器空闲的时间。
  • 有时跨域拆分组件可以最大化并行下载。
  • 不要缩放HTML中的图像,并将组件保持在25k以下。
  • 避免使用空src或href的过滤器,CSS表达式,HTML元素。
  • 使用反向代理调试您的Web请求(例如Charles)。
  • 使用诸如Y-Slow和PhantomJS之类的工具进行基本性能检查。
  • 使用Google PageSpeed工具来分析和优化您的网站。
  • 阅读有关W3C导航时序规范(GitHub)的信息。

的PHP

  • 启用PHP缓存(例如OpCacheAPC)和调整设置。
  • 考虑使用PHP-FPM代替mod_php加上Nginx代替Apache。

数据库

服务器

  • 检查有关Drupal的建议系统要求
  • 检查Drupal的建议Web服务器设置
  • 检查建议的PHP配置设置 Drupal。
  • 确保主机位于快速存储设备(例如SSD)上。
  • 使用专用的快速可靠服务器反对共享主机。
  • 安装Redismemcached(具有igbinary支持),并将Drupal配置为使用它。
  • 为搜索引擎定义更长的TTL(例如24h的TTL避免漫游器到达服务器)。
  • 减少DNS查找(确保已将其缓存)。

高流量网站

如果您希望网站的负载很高,请使用Varnish。考虑也使用CDN。

在以下位置了解更多信息:扩展和调整性能的真实经验


更多资源:


3

2

为了优化您的Drupal网站的性能,已经进行了很多调整-但并非所有都必须。我们必须四处寻找可以导致Drupal优化平台的某些替代方案和技术。缓存,是的,它是通过不同方式优化网站的一种方法,但是更多的附加组件和技巧可以增加并优化您的网站,而无需进行任何麻烦的流程。

我们最近在我们的网站上发布了类似的文章,我认为这可能会帮助您进行一些调整。

来源:http//www.cloudreviews.com/blog/drupal-performance-optimization-tips


2

通过不安装任何新模块,可以将Drupal速度提高到合理水平。是的,Drupal具有性能配置。

  1. 您可以通过以下方法进行设置:YourSiteDomain / admin / config / development / performance
  2. 在Chaching下启用“为匿名用户缓存页面”
  3. 最小缓存寿命:1天(如果您不进行定期更新)
  4. 缓存的页面到期时间:1天(如果您不进行定期更新)
  5. 启用“压缩缓存的页面”
  6. 启用“汇总和压缩CSS文件”
  7. 启用“汇总JavaScript文件”

  8. 设置此配置后,请转到:YourSiteDomain / admin / reports / status

  9. 检查“ css”和“ js”目录是否存在任何权限问题
  10. 更正状态报告页面上定义的权限

现在,您已经完成了Drupal 7网站的速度优化。

很少有在线速度测试工具可以检查速度。在更新上述设置之前,请确保使用一种速度检查工具并运行测试。更新性能设置后,再次运行速度测试。您肯定会看到进步。

Pingdom和HTTP Fox(FireFox插件)是检查站点速度的最佳工具。

以上设置不仅为匿名用户缓存您的页面,还压缩CSS和JS文件。例如,如果您的站点正在加载80个文件,则发布这些设置后,请求数将减少至少50%,因此,在Drupal站点上,您的速度提高了2倍。


2

作为后端开发人员,总是有空间来改进您的代码以提高网站的性能。后端开发人员的一些准则可能是:

1)清理看门狗表

2)不要滥用变量API

3)发出更少或更好的HTTP请求

4)保持“点模块”简短

对于字体和网站建设者,可以实现更多目标,但是从各个角度考虑性能至关重要。

资料来源:上线之前先进行最佳化


2

未优化的具有2 GB RAM的Drupal 7站点可以令人满意地每秒处理约20-25个请求。如果您想超越此范围,则需要对该站点进行一些调整。您要调整的内容取决于网站上的大多数用户是匿名用户还是经过身份验证的用户。以下是您可以提高性能的主要工作:

该网站主要为匿名用户服务:

1)绝对安装和配置APC,内存缓存和实体缓存。

2)将Varnish代理放在Web服务器的前面。安装和配置大约需要30分钟,但会大大减少页面加载时间。实际上,如果所有页面都已缓存,那么Varnish可以在2 GB的计算机上每秒处理约300个请求。使用“过期”模块仅使内容更新/删除上的选定页面过期。

3)使用高级CSS / JS聚合模块来聚合CSS和JS文件。尝试将所有JS文件移动到页面底部。但是请注意,这可能会破坏您的站点,因此请在进行全面测试后在生产中实施。还可以尝试内联关键CSS。以我的经验,它将使页面加载时间减少大约半秒。

4)CSS / JS / images应该有很长的过期标头。这将确保浏览器不会一次又一次地请求相同的CSS / JS /图像。

5)确保网络服务器正在提供压缩的页面/ CSS / JS。

完成上述5个步骤后,您的2 GB RAM服务器应该能够轻松地每秒处理50个请求。

该网站主要为经过身份验证的用户提供服务:

优化这样的站点更加复杂。出于优化目的,此类站点属于两个子类别之一:

(a)网站上的大多数页面都是相同的,除了1或2个包含用户特定信息的块。例如,Drupal Commerce网站。

(b)大多数页面是完全为用户定制的。例如,Drupal Commons网站。

如果您的网站属于(a)类别,请应用我们为大部分为匿名用户服务的网站讨论的大多数技术。唯一的区别是,对于非管理员页面,Varnish需要从标题中删除SESSION cookie并提供缓存的页面。使用AJAX块模块可以使用AJAX服务器提供具有用户特定信息的块。这样,使用Varnish可以非常快速地为大多数页面提供服务,然后可以通过AJAX提供特定于用户的信息。

如果您的网站属于(b)类别,请使用Authcache模块。我不想尽可能多地使用它,因为它需要大量的配置和维护。但这确实工作得很好。它不会像使用Varnish那样快,但是它每秒能够处理50个请求。

如果您想超越本文讨论的范围,请查看Drupal Performance Optimization Checklist。披露:这是我写的。它列举了可以使您的Drupal网站快速发展的一系列详尽工作。

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.