提升WordPress网站性能的实用指南
关键要点:
WordPress占据全球前一百万网站的近50%的CMS市场份额(数据来自Builtwith.com),在电商领域,WooCommerce的占比也达到33%。尽管WordPress有时会被诟病臃肿、资源消耗大,数据模型也有不足之处,但其普及程度毋庸置疑。
WordPress的易用性和低门槛使其得以广泛应用。它易于设置,几乎不需要技术知识。每月只需几美元就能找到WordPress主机,基本设置只需半小时点击即可完成。免费的WordPress主题和包含所见即所得页面构建器的主题比比皆是。
很多人看不起WordPress,但不可否认的是,WordPress推动了互联网和PHP的发展,许多互联网专业人士也受益于WordPress的易学性而开启了职业生涯。
然而,这种易用性也带来了代价。许多打着WordPress旗号的网站并非由专业人士打造,而是由价格低廉的开发者完成的,性能和外观往往被忽视。专业的外观和性能不应该事后补救,而应该在网站规划阶段就予以考虑。
知名英国二手车经销商Ling's Cars尝试了一种独特的营销方式,除非你非常清楚自己在做什么,否则请不要模仿。
一切从主机选择开始
新手通常会选择低成本的产品,并配备许多初学者友好的功能。考虑到一些大型行业参与者的不正当商业行为,以及客户对网站迁移专业人员的需求,网站设置的这一部分需要认真对待。
我们可以将WordPress主机供应商分为几个等级:
对于托管式主机,需要注意的是服务器堆栈、CDN集成和SSD存储。像A2这样的保证资源是一个很大的优势。接下来要寻找的是SSH访问权限。精通技术的用户可能会受益于WP-CLI的可用性。
选择VPS时,需要注意的是XEN或KVM虚拟化优于OpenVZ,因为它可以减轻资源的过度销售,有助于保证你购买的资源确实是你的。它还提供了更好的安全性。
Easy Engine是一款软件,可以将你的整个VPS/WordPress安装变成一个一小时的工作。
关于服务器堆栈,如果追求性能,Nginx优于Apache,PHP 7是必须的。如果我们真的需要Apache,使用Nginx作为反向代理是一个优势,但这设置可能会比较复杂。
测试表明PHP 7比之前的版本有很大的优势。根据fasthosts.co.uk:
与PHP 5.6相比,WordPress 4.1在PHP 7上每秒执行的请求增加了95%。
选择主机时,请注意一些臭名昭著的提供商的负面体验。
软件注意事项
通常会减慢WordPress网站速度的是庞大的前端,其中包含大量的静态资源和数据库查询。这些问题源于主题的选择(及其页面构建器、大型滑块等),这不仅会由于许多请求和整体大小而减慢初始加载速度,而且还会由于大量的JavaScript和需要渲染的内容而减慢浏览器速度,使其无响应。
这里的黄金法则是:除非有充分的理由,否则不要使用它。
这可能听起来像来自荷马·辛普森口中的一条规则,但如果你可以跳过任何花里胡哨的功能,那就跳过吧。要保守。如果你必须添加一些闪亮的功能或JS视觉效果,总是优先选择那些尽可能专门为你的确切需求量身定制和编码的。如果你是熟练的编码人员,并且项目证明了这项工作的合理性,请记住简洁性自己编写代码。
检查所有你的网站不可或缺的插件——并删除其他插件。
最重要的是:在你开始修剪之前备份你的网站!
如果你使用的是一个你使用了许多自定义帖子或字段的主题,请注意,很多这些都会减慢你的数据库查询速度。保持你的数据模型尽可能简单,如果不是,请考虑WordPress最初的用途是一个博客引擎。如果你需要更多功能,你可能需要考虑一些现有的MVC Web框架,这些框架将使你能够更好地控制你的数据模型和数据库的选择。
在WordPress中,我们可以通过使用自定义帖子类型、自定义分类法和自定义字段来构建丰富的自定义数据模型,但要注意性能和复杂性的成本。
如果你了解代码,请检查你的主题以查找不必要的数据库查询。每次单独的数据库访问都会在你的TTFB中花费宝贵的毫秒,以及你的服务器内存的兆字节。记住,二级循环可能代价高昂——因此在使用显示额外帖子的部件和小部件(例如滑块或部件区域)时要小心。如果你必须使用它们,请考虑在一个查询中获取所有帖子,否则可能会减慢你的网站速度。对于那些不想从头开始编码的人,有一个GitHub存储库。
使用自定义字段根据某些条件获取帖子可能是一个开发复杂WordPress功能的强大工具。这是一个元查询的示例,在这里你可以找到关于其成本的一些详细说明。总结:帖子元数据并非为过滤而构建,分类法是。
get_post_meta是一个通常用于获取自定义字段的函数,它可以只使用帖子ID作为参数来调用,在这种情况下,它会在一个数组中获取所有帖子的元数据字段,或者它可以将自定义字段的名称作为第二个参数,在这种情况下,它只返回指定的字段。
如果在一个页面或请求上多次对某个帖子使用get_post_meta()(对于多个自定义字段),请注意这不会产生额外成本,因为第一次调用此函数时,所有帖子元数据都会被缓存。
在网站的生命周期中安装和删除各种插件以及更改不同的主题,通常会使你的数据库充满了许多不需要的数据。完全有可能发现——在检查为什么WordPress网站运行缓慢或由于服务器内存耗尽而无法加载时——数据库已经增长到数百兆字节甚至超过千兆字节,没有任何内容可以解释它。
wp-options是许多孤立数据通常遗留的地方。这包括但不限于各种瞬态数据(这篇文章警告了关于插件中删除瞬态数据的最佳实践)。瞬态数据是一种缓存形式,但与任何其他缓存一样,如果使用不当,它可能会弊大于利。如果你的服务器环境提供它,wp-cli有一个专门用于瞬态数据管理的命令集,包括删除。如果没有,WordPress插件库中有一些插件可以删除过期的瞬态数据,但它们提供的控制较少。
如果删除瞬态数据仍然使我们的数据库膨胀而没有任何实际原因,WP-Sweep是一个优秀的免费工具,可以完成清理数据库的工作。另一个需要考虑的是WP Optimize。
在进行任何类型的数据库清理之前,强烈建议你备份你的数据库!
一个非常方便的插件,用于分析整个WordPress请求生命周期,是Debug Objects。它提供了对所有瞬态数据、短代码、类、样式和脚本、加载的模板、数据库查询和钩子的检查。
确保了一个合理的、面向性能的设置——提前考虑我们的服务器堆栈,消除主题选择和插件和小部件过载可能造成的膨胀——我们应该尝试识别瓶颈。
如果我们在Pingdom Speed Test之类的工具中测试我们的网站,我们将获得请求中加载的所有资源的瀑布图:
这为我们提供了关于请求-响应生命周期的详细信息,我们可以分析这些详细信息以查找瓶颈。例如:
为了获得更广泛的测试和指导,以改进网站,有一个名为webcoach的小型命令行实用程序。在一个安装了NodeJS和npm的环境中(如Homestead Improved),安装它很简单:
<code>npm install webcoach -g</code>
安装后,我们可以获得关于如何改进网站各个方面的详细见解和建议,包括性能:
缓存
缓存在管理WordPress网站时可以发挥重要作用。有几个层次和可能的缓存方式。
页面缓存是Web应用程序的整个HTML输出的缓存。
如果可以,我们应该首先尝试测试服务器级别的解决方案,例如NGINX缓存或Varnish,或者Kinsta、SiteGround等托管主机供应商提供的缓存系统。
如果这并没有像我们希望的那样有帮助,我们可能需要考虑使用WP Super Cache、WP Fastest Cache或GitHub上经过改进的W3 Total Cache等插件。所有这些都可以提高性能,但通常需要一些实验。配置不当的缓存解决方案实际上会损害网站的性能。例如,W3TC——至少在改进之前——被认为可能是最好的免费缓存解决方案,可以创造奇迹……当它工作时。当它不工作时,它可能会使你的网站脱机。
WP Rocket被认为可能是最受好评的高级缓存解决方案。
页面缓存可以大幅提高性能,从RAM中提供整个网站,但请注意,如果你有一个带有购物车或依赖于cookie或个性化前端的动态网站,它可能会带来并发症。它可以为一个用户提供另一个用户的UI部分,因此通常需要在投入生产之前进行测试。这尤其适用于非托管服务器上的解决方案,例如Varnish或Cloudflare页面缓存。
当动态的、依赖于cookie的网站难以使用全页面方法进行缓存,或者当我们缓存Ajax请求时,片段缓存是一个需要考虑的解决方案。这里有一个很好的介绍。
对象缓存意味着编译和存储内存中所有数据库查询和PHP对象。一些缓存插件试图为我们管理对象缓存后端。使用后端通常是APCu、Memcached和Redis。它们需要安装在服务器上。
为了更深入地测试我们的PHP代码和对象缓存的性能,一个有价值的工具(需要shell访问权限和安装wp-cli)是profile命令。我们可以使用以下命令安装它:
<code>npm install webcoach -g</code>
或
<code>wp package install git@github.com:wp-cli/profile-command.git</code>
(根据安装情况,你可能需要添加--allow-root标志。)
然后我们可以分析整个加载周期,或者深入到特定的钩子、文件和类、它们的加载时间和缓存比率。
浏览器缓存意味着强制访问者的浏览器将其静态文件保存在其缓存中,因此他们不需要在重复访问时从我们的服务器获取这些文件。这里使用cache-control和expires标头。缓存插件通常管理浏览器缓存和设置标头。Technumero制作了一个更深入的指南。
静态文件
静态文件是图像、样式表、JS代码、字体、媒体文件等。我们应该确保我们压缩它们,并且如果可能的话,我们正在利用HTTP/2来提供这些文件。如果我们的托管式主机不支持HTTP/2,或者将我们的非托管VPS迁移到HTTP/2超出我们的能力范围,最简单的方法是将CDN集成到我们的堆栈中。CDN从最接近我们受众的数据中心提供我们的静态文件。这减少了延迟,通常意味着利用它们高度调整的基础设施。
Autooptimize是一个可以帮助操作我们的静态资产并减少请求数量的插件,它可以连接JS和样式表文件,缩小它们,从而缩小页面输出。
关于媒体文件,我们应该考虑压缩/编码我们的视频以减小它们的大小,并通过YouTube等提供商提供它们,以减少对我们服务器的压力。像Amazon S3这样的云存储提供商是另一个不错的选择。视频托管不在本文的讨论范围之内,但WPMUDEV制作了一个关于此主题的实用指南。
关于图像,这些图像通常对于Web来说太大。有时,唯一能够让我们的服务器正常运行的解决方案(这可能需要很长时间)是通过shell进行批量压缩。Linux上的Imagemagick有一个有用的convert工具,允许我们批量压缩我们的图像。此示例递归地对文件夹中的所有JPG进行此操作,将JPEG质量降低到80%,以及其他一些小的增强功能,并调整图像大小(它应该是自解释的):
<code>npm install webcoach -g</code>
WP Bullet有两个优秀的指南,用于批量压缩JPG和PNG文件。
除此之外,还有Imagify服务和相应的WordPress插件来减小图像大小,EWWW图像优化器等等……
其他随机提示
<code>wp package install git@github.com:wp-cli/profile-command.git</code>
在Apache中:
<code>wp package install wp-cli/profile-command</code>
像iThemes Security、WPS Hide login等插件可以帮助解决这个问题,并更改我们的登录页面URL。
如果你受到暴力攻击,并且没有受到像Cloudflare这样的CDN或托管主机的保护,请考虑使用像fail2ban这样的防火墙(无论是否受到攻击,你都应该安装防火墙)。
综上所述,需要再次警告:在你对网站进行任何更改之前,请备份它!
结论
我希望这篇WordPress优化技巧的汇编能派上用场。随着网站规模的增长,这些技巧越来越难以追溯地应用。这就是为什么最好尽早开始,并努力获得最大效果:在启动之前应用尽可能多的这些技术,你不仅将拥有一个顺利的启动,而且从第一天起就拥有一个高性能的应用程序——这对于所有新用户来说肯定是一种极好的体验。
确保你也查看SitePoint的PWA指南。从第一天起就尽可能使你的WP网站成为PWA,这将帮助用户将其安装在其设备的主屏幕上,为重复访问做好准备。
WordPress性能优化的常见问题解答
有几个插件可以显著提高WordPress网站的性能。其中一些最好的包括WP Rocket、W3 Total Cache和WP Super Cache。这些插件提供页面缓存、对象缓存和GZIP压缩等功能,可以帮助加快网站速度。此外,像Imagify这样的插件可以优化你的图像,减小它们的大小而不会影响质量,这也可以提高加载时间。
内容交付网络(CDN)可以通过在世界各地存储网站内容的副本来显着提高WordPress网站的性能。当用户访问你的网站时,CDN会从最接近他们的服务器交付内容,从而减少内容加载所需的时间。这可以显着提高网站的速度,尤其对于远离你的主服务器的用户。
优化WordPress数据库可以显着提高网站的性能。这可以通过定期清理数据库、删除不必要的数据和优化数据库表来实现。像WP-Optimize这样的插件可以自动化此过程,使维护干净高效的数据库更容易。
图像优化可以通过减小图像的大小而不会影响其质量来显着提高WordPress网站的性能。这可以通过压缩图像、使用正确的图像格式和将图像调整到合适的尺寸来实现。像Imagify这样的插件可以自动化此过程,使优化图像更容易。
减少服务器响应时间可以显着提高WordPress网站的性能。这可以通过优化服务器配置、使用高质量的主机提供商和实施缓存解决方案来实现。此外,减少网站向服务器发出的请求数量也可以提高服务器响应时间。
缩小CSS和JavaScript文件可以通过减小这些文件的大小来显着提高WordPress网站的性能。此过程包括从代码中删除不必要的字符,如空格和注释,而不会改变其功能。像Autoptimize这样的插件可以自动化此过程,使缩小文件更容易。
优化WordPress网站以适应移动设备可以显着提高网站在这些设备上的性能。这可以通过实施响应式设计、优化图像以适应移动设备和使用移动友好的主题来实现。此外,像WPtouch这样的插件可以帮助你创建移动友好的网站版本。
延迟加载可以通过仅在用户屏幕上可见时加载图像和其他内容来显着提高WordPress网站的性能。这可以减少页面的初始加载时间,提高网站的速度。像Lazy Load by WP Rocket这样的插件可以自动化此过程,使在你的网站上实施延迟加载更容易。
GZIP压缩可以通过减小文件的大小来显着提高WordPress网站的性能。此过程包括在文件发送到用户浏览器之前压缩文件,从而减少需要传输的数据量。这可以显着提高网站的加载时间。像Check and Enable GZIP compression这样的插件可以自动化此过程,使在你的网站上实施GZIP压缩更容易。
监控WordPress网站的性能可以帮助你识别可能减慢网站速度的任何问题。这可以使用Google PageSpeed Insights、GTmetrix和Pingdom等工具来完成。这些工具可以为你提供有关网站性能的详细信息,包括加载时间、页面大小和请求数量。
以上是WordPress性能优化的完整指南的详细内容。更多信息请关注PHP中文网其他相关文章!