优化

无论您是运行高流量的 WordPress 安装还是在低成本共享主机上运行小型博客,您都应该优化 WordPress 和您的服务器以尽可能高效地运行。本文通过具体的推荐方法提供了 WordPress 优化的广泛概述。但是,它不是每个方面的详细技术说明。

如果您现在需要快速修复,请直接进入缓存部分,您将在那里以最少的麻烦获得最大的收益。如果您想立即开始更彻底的优化过程,请转到如何提高 WordPress 的性能。

下面的“影响绩效的因素”和“如何衡量绩效”中包含对绩效主题的广泛概述。这里讨论的许多技术也适用于 WordPress Multisite (MU)。

性能因素

有几个因素会影响您的 WordPress 博客(或网站)的性能。这些因素包括但不限于托管环境、WordPress 配置、软件版本、图形数量及其大小。

本文中的大部分这些性能下降因素都已解决。

托管

您可以使用的优化技术取决于您的主机设置。

共享主机

这是最常见的托管类型。您的站点将与许多其他站点一起托管在服务器上。托管公司为您管理网络服务器,因此您几乎无法控制服务器设置等。

与此类托管最相关的领域是:缓存、WordPress 性能和内容卸载

虚拟主机和专用服务器

在此托管方案中,您可以控制自己的服务器。服务器可能是专用硬件,也可能是共享相同物理硬件的多个虚拟服务器之一。

关键是,您可以控制服务器设置。除了上述领域(缓存和 WordPress 性能,这里感兴趣的关键领域是:服务器优化和内容卸载

服务器数量

在处理非常高的流量情况时,可能需要使用多个服务器。如果您处于这个级别,您应该已经使用了上面列出的所有适用技术。

WordPress 数据库可以很容易地移动到不同的服务器,只需要对配置文件做一些小的改动。同样,图像和其他静态文件可以移动到备用服务器(请参阅内容卸载)。

Amazon 的 Elastic Load Balancer可以帮助将流量分散到多个 Web 服务器,但需要更高水平的专业知识。如果您使用多个数据库服务器,HyperDB类提供了标准WPDB类的直接替代品,并且可以处理复制和分区结构中的多个数据库服务器。

硬件性能

您的硬件能力将对您的站点性能产生巨大影响。处理器数量、处理器速度、可用内存量和磁盘空间以及磁盘存储介质都是重要因素。托管服务提供商通常以更高的价格提供更高的性能。

地理距离

服务器与网站访问者之间的距离也会对性能产生影响。内容交付网络或 CDN 可以跨不同地理区域镜像静态文件(如图像),以便您的所有站点访问者都获得最佳性能。

服务器负载

服务器上的流量及其处理负载的配置方式也会产生巨大影响。例如,如果您不使用缓存解决方案,性能将随着额外的页面请求进入并堆积而减慢至停止,通常会使您的网络或数据库服务器崩溃。

如果配置得当,大多数托管解决方案都可以处理非常高的流量。将流量卸载到其他服务器也可以减少服务器负载。

滥用流量,例如登录暴力攻击、图像热链接(其他站点从高流量页面链接到您的图像文件)或 DoS 攻击也会增加服务器负载。识别并阻止这些攻击非常重要。

软件版本和性能

确保您使用的是最新的软件也很重要,因为软件升级通常会修复错误并提高性能。确保您运行的是最新版本的 Linux(或 Windows)、Apache、MySQL/MariaDB 和 PHP 非常重要。

WordPress配置

您的主题将对您网站的性能产生巨大影响。一个快速、轻量级的主题将比一个繁重的图形负载低效的主题更有效。

插件的数量及其性能也会对您网站的性能产生巨大影响。停用和删除不需要的插件是提高性能的一个非常重要的方法。

跟上 WordPress 的升级也很重要。

图形尺寸

确保帖子中的图片针对网络进行了优化可以节省时间、带宽并提高搜索引擎排名。

性能测试工具

  • WebPageTest是一种用于从不同位置、浏览器和连接速度测试真实网站性能的工具。
  • Google PageSpeed Insights是一种衡量您的 WordPress 网站性能并接收关于如何进行改进的清晰、具体反馈的方法。
  • 内置的浏览器开发工具(即 Firefox 或 Chrome)都有性能测量工具。

如何提高 WordPress 的性能

优化您的 WordPress 网站

最小化插件

提高 WordPress 性能的第一个也是最简单的方法是查看插件。停用并删除任何不需要的插件。尝试有选择地禁用插件以衡量服务器性能。

您的某个插件是否会显着影响您网站的性能?查看插件文档或在相应的插件支持论坛中寻求支持。

优化内容

图像文件
——是否有任何不需要的图像?(例如,您可以用文本替换一些图像吗?)
– 确保所有图像文件都经过优化。为每个图像选择正确的格式 (JPG/PNG/GIF) 和压缩。

总文件数/大小
——您能否减少显示站点平均页面所需的文件数?
– 仍在使用 HTTP1 时,建议将多个文件合并到一个优化文件中。
– 缩小 CSS 和 JavaScript 文件。

升级硬件

为托管服务提供商的更高服务水平支付更多费用可能非常有效。增加内存 (RAM) 或切换到具有固态驱动器 (SSD) 的主机(例如 Digital Ocean)可能会产生很大的不同。增加处理器数量和处理器速度也会有所帮助。在可能的情况下,尝试在多个服务器或 VPS-es 上分离具有不同功能的服务,例如 HTTP 和 MySQL。

优化软件

确保您正在运行最新的操作系统版本,例如 Linux、Windows Server 和最新的 Web 服务器,例如 Apache 或 IIS,以及数据库,例如 MySQL 服务器和 PHP。

也许您无法执行这些任务,请按照下面的提示进行操作。只需让您的托管服务提供商为您做。一个好的托管服务提供商会将您的帐户升级或移动到升级后的服务器,以符合建议。如果需要,您可以切换到托管 WordPress 托管解决方案。

**DNS:**不要在您的 WordPress 服务器上运行 DNS。使用 DNS 的商业服务,例如亚马逊的 Route 53 或您的域名注册商的免费服务。使用诸如 Amazon 之类的服务还可以使在维护或紧急情况下在备份服务器之间切换变得更加容易。它还提供一定程度的容错能力。如果您将 DNS 托管在外部服务器上,这将减少主 Web 服务器上的负载。这是一个简单的更改,但它会卸载一些流量和 CPU 负载。

**Web 服务器:**可以配置您的 Web 服务器以提高性能。从 Web 服务器缓存到设置缓存标头以减少每个访问者的负载,有一系列技术。搜索您的特定 Web 服务器优化(例如,搜索“apache 优化”以获取更多信息)。一些 Web 服务器具有您可以支付的更高速度版本,例如Litespeed。还有许多方法可以根据您的特定主机和站点配置(例如 Memcache)调整 Apache 以获得更高的性能。

**PHP:**有多种可用的 PHP 加速器可以显着提高 PHP 文件的性能。这将适用于所有 PHP 文件,而不仅仅是您的 WordPress 安装。搜索 PHP 优化以获取更多信息,例如APC或OPcache。W3 Total Cache 插件,如下所述,为 Memcache、APC 和其他 Opcode 缓存提供集成支持。

MySQL/MariaDB: MySQL 或 MariaDB 优化本身就是一门魔法。对查询缓存设置的一些简单更改会对 WordPress 性能产生巨大影响,因为 WordPress 会在每个请求上重复大量查询。如今,由于 InnoDB 是 MySQL 的默认存储引擎,您必须确保使用它。InnoDB 可以进行优化和微调,搜索“mysql 优化”、“mysql innodb 性能”或“innodb 优化”或获取更多信息和示例。搜索“mysql convert myisam to innodb”以获取有关如何将旧的 MyISAM 表转换为 InnoDB 的信息。

Iliya Polihronov 在 WordCamp San Francisco 2012 上展示了如何优化 WordPress 的一个很好的例子。Iliya 负责 WordPress.com 的服务器优化等工作。

不要在您的 WordPress 服务器上运行邮件服务器。对于您的联系表格,请使用带有免费 Mailgun 的 Contact Form 7 之类的东西。

缓存

缓存插件

可以轻松安装W3 Total Cache或WP Super Cache等插件,并将您的 WordPress 帖子和页面缓存为静态文件。然后将这些静态文件提供给用户,从而减少服务器上的处理负载。对于相当静态的页面,这可以将性能提高数百倍。

当与 Varnish 等系统级页面缓存结合使用时,它会非常强大。如果您的帖子/页面有很多动态内容配置缓存可能会更复杂。

W3 总缓存

W3 Total Cache (W3TC) 是最新一代的 WordPress 性能插件,结合了网络开发权威的研究,为 WordPress 网站提供最佳的用户体验。这些详细的指南将引导您完成整个过程。

W3TC 的独特之处在于它能够优化服务器端和客户端的性能,增加了原本不可用的功能:

  • 页面缓存:W3TC 通过创建页面的静态 HTML 版本来帮助减少响应时间,允许 Web 服务器在不调用 PHP 的情况下为它们提供服务。当发表评论或编辑页面时,它会自动更新缓存。
  • Minification:从 HTML、CSS 和 JavaScript 文件中删除不需要的字符,然后在对缓存文件应用 HTTP 压缩之前分别组合它们。
  • 数据库缓存:数据库查询(对象)也被缓存,允许许多站点减少生成新页面所需的时间。这对于收到大量评论的网站特别有用。
  • 标头:W3TC 管理标头(实体标签、缓存控制、过期),这些标头控制 Web 浏览器中的文件缓存,减少服务器负载并提高用户的感知性能。
  • 内容交付网络 (CDN):使用 CDN 可以让您从托管帐户卸载资源。W3TC 将对图像、CSS、JavaScript 和其他静态文件的请求转移到高性能服务器网络。离访客最近的服务器会自动用于下载文件,从而提供最快的下载速度。

W3TC 可用于通过共享或专用托管在单服务器和多服务器环境中优化 WordPress。

WP超级缓存

WP Super Cache是 WordPress 的静态页面缓存插件。它生成由 Apache 直接提供的 HTML 文件,无需处理相对繁重的 PHP 脚本,从而帮助您显着提高 WordPress 博客的速度。

使用 WP Super Cache 可以让您的服务器以与提供常规图形文件相同的速度提供缓存的 HTML 页面。如果您的站点正在努力应对其每日访问者数量,或者它出现在Digg.com、Slashdot.org或任何其他受欢迎的站点上,请考虑使用 WP Super Cache。

服务器端缓存

Web 服务器缓存更复杂,但用于非常高流量的站点。有很多选项可用,超出了本文的范围。最简单的解决方案从本地服务器缓存开始,而更复杂和涉及的系统可能会在实际运行 WordPress 应用程序的 Web 服务器“前面”使用多个缓存服务器(也称为反向代理服务器)。向您的服务器添加像替代 PHP 缓存(APC)这样的操作码缓存将提高 PHP 的性能很多倍。

Varnish Cache与 W3 Total Cache 协同工作,将预先构建的页面存储在内存中并快速提供它们,而无需执行 Apache、PHP、WordPress 堆栈。

如内所述,使用 Disqus 等评论插件代替原生 WordPress 评论可以帮助 Varnish,因为它不需要您的读者登录 WordPress 并增加 Varnish 可以从缓存中提供的页面浏览量。

浏览器缓存

浏览器缓存可以通过减少每页的请求数来帮助减少服务器负载。例如,通过为不变的文件(静态文件,如图像、CSS、JavaScript 等)设置正确的文件头,浏览器会将这些文件缓存在用户的计算机上。此技术允许浏览器检查文件是否已更改,而不是简单地请求它们。结果是您的 Web 服务器可以回答更多的 304 响应,确认文件未更改,而不是 200 个响应,这需要发送文件。

查看 HTTP Cache-Control(特别是max-age)和 Expires 标头,以及实体标签以获取更多信息。

W3 Total Cache 集成了对浏览器缓存和 ETag 的支持。

对象缓存

使用持久对象缓存有助于通过减少从 Web 服务器访问数据库的次数来加快页面加载时间。例如,您站点的选项数据需要对每个页面视图可用。如果没有持久对象缓存,您的 Web 服务器必须从数据库中读取这些选项来处理每个页面视图。这些额外的数据库访问会减慢您的 Web 服务器的响应时间 (TTFB),并可能在流量高峰期间迅速使您的数据库服务器不堪重负。

为了让您的站点使用持久对象缓存,您的托管服务提供商必须为您提供一种特定类型的服务器,即缓存服务器。流行的缓存服务器是Redis和Memcached。请您的托管服务提供商帮助您安装和配置持久对象缓存,他们会推荐合适的插件,例如:

  • Redis 对象缓存– 为 WordPress 提供持久的 Redis 对象缓存后端,可与各种 Redis 客户端一起使用。需要 Redis 服务器。
  • Memcached 对象缓存– 为 WordPress 提供持久性 Memcached 对象缓存后端。需要内存缓存服务器和内存缓存扩展。

进一步阅读

  • WP 对象缓存)
  • 加快网站速度的最佳实践——过期/缓存控制标头和 ETag(来自 Yahoo! Developer Network)
  • WebSiteOptimization.com:使用服务器缓存控制来提高性能

内容卸载

使用内容分发网络 (CDN)

使用 CDN 可以大大降低网站的负载。将图像、javascript、css 和主题文件的搜索和交付卸载到 CDN 不仅速度更快,而且可以减轻 WordPress 服务器自己的应用程序堆栈的负载。如果 CDN 与上述 W3TC 等 WordPress 缓存插件结合使用,则效果最佳。

CloudFlare是一种流行的内容交付网络,它还提供互联网安全服务。计划从免费开始,但附加功能需要额外付费。CloudFlare 是一个固定成本的 CDN,这意味着他们按功能而不是使用量收费。CloudFlare 允许您在返回原始主机之前通过他们的网络路由您的站点流量。

Amazon Cloudfront使用 Amazon S3 服务为您的静态文件提供内容分发网络 (CDN) 功能。CDN 是一种服务,可将您的静态文件缓存在世界各地的众多 Web 服务器上。为您的用户提供更快的下载性能,无论他们身在何处。建议您将 Cloudfront 与 S3 结合使用,而不是单独使用 S3;成本没有显着差异。

MaxCDN是一种按使用量付费的内容分发网络 (CDN),类似于 Amazon Cloudfront。不同之处在于支持视频点播以及文件的“镜像”(无需上传),但您可以根据需要上传它们。

另一个可供选择的 CDN 提供商是KeyCDN。他们在支持页面上提供分步 WordPress 集成指南。

KeyCDN 和 MaxCDN 是最实惠的 CDN 选项之一,它们能够击败亚马逊等竞争对手的定价,因为它们是更大的 CDN 提供商的一个部门。

静态内容

任何静态文件都可以卸载到另一台服务器。例如,任何静态图像、JavaScript 或 CSS 文件都可以移动到不同的服务器。这是非常高性能的系统(谷歌、Flickr、YouTube 等)中的一种常见技术,但对于单个服务器正在苦苦挣扎的小型站点也很有帮助。此外,将此内容移动到不同的主机名可以为将来的多个服务器奠定基础。

一些 Web 服务器经过优化以提供静态文件,并且可以比 Apache 等更复杂的 Web 服务器(例如lighttpd)更有效地执行此操作。

Amazon Simple Storage Service (S3)是一种按使用量付费的专用静态文件托管服务。如果没有最低成本,对于达到共享或单个服务器可以处理的峰值的较低流量站点可能是实用的。

多个主机名

还可以通过在多个主机名之间拆分静态文件来改进用户。大多数浏览器只会同时向服务器发出 2 个请求,因此如果您的页面需要 16 个文件,它们将一次被请求 2 个。如果您将其分布在 4 个主机名之间,它们将一次被请求 8 个。这可以减少用户的页面加载时间,但它可以通过创建更多并发请求来增加服务器负载。此外,众所周知,如果过度使用,“流水线”通常会使访问者的互联网连接饱和。

卸载图像是最容易和最简单的起点。所有图像文件都可以在三个主机名(例如 , )之间assets1.example.com平均assets2.example.com分配assets3.example.com。随着流量的增长,这些主机名可以移动到您自己的服务器上。注意:避免随机选择主机名,因为这会影响浏览器缓存并导致更多流量,还可能会产生过多的 DNS 查找,这确实会降低性能。

同样,任何静态 JavaScript 和 CSS 文件都可以卸载到单独的主机名或服务器。

提要

您的提要可以很容易地卸载到外部服务。像Google FeedBurner这样的提要跟踪服务会自动执行此操作,Feedburner 服务器将处理所有提要流量,并且只会每隔几分钟更新一次来自您网站的提要。这可以大大节省流量。

同样,您可以将自己的提要卸载到单独的服务器(例如 feeds.yoursite.com),然后处理您自己的提要统计/广告。

进一步阅读

  • 使用 Amazon S3 / Cloudfront 卸载图像:Amazon S3 和 CloudFront 与 WordPress。
  • 减少您网站的带宽使用。

压缩

有多种方法可以压缩服务器上的文件和数据,以便将您的页面更快地传送到读者的浏览器。上面描述的 W3 Total Cache 集成了对大多数常见压缩方法的支持。

W3 Total Cache 支持 Minify 和 Tidy 来压缩和组合您的样式表和 javascript 文件。它还支持输出压缩,例如 zlib,另请参阅输出压缩。

压缩媒体文件(即图像)也很重要。WP Smushit插件可以帮助解决这个问题。

数据库调优

清理你的数据库

WP Optimize插件可以帮助您减少数据库中的额外混乱。

您还可以指示 WordPress 尽量减少它保存的帖子和页面的修订数量。

添加服务器

虽然需要额外的专业知识,但添加服务器可能是提高性能的有效方法。我强烈推荐阅读Architecting a Highly Scalable WordPress Site in AWS A guide for building a more expensive, highly scalability AWS implementations using Amazon's Relational Data Store (RDS)。

您可以使用 Amazon 的 Elastic Load Balancer 将流量分布到多个 Web 服务器,您可以使用HyperDB或 Amazon 的 RDS 来运行更具扩展性的或多个数据库服务器。

自动加载选项

自动加载选项是插件和主题的配置设置,在每次加载 WordPress 页面时自动加载。每个插件和主题都定义了自己的选项以及自动加载的选项。自动加载的选项太多会降低您的网站速度。通常,您应该尽量将站点的自动加载选项保持在 800kb 以下。

默认情况下,自动加载的选项保存在 wp_options 表中。可以在此表中逐个选项地关闭自动加载。有关查看和更改自动加载选项的分步说明,请咨询您的托管服务提供商。

如果您使用持久对象缓存,选项(无论是否自动加载)加载速度更快、效率更高。

其他资源

进一步阅读

  • WordPress 的高流量提示
  • 优化 WordPress 托管的 10 个实用技巧
  • 提高 WordPress 性能的 16 个快速提示 – 信息图
  • 11 种加速 WordPress 的方法
  • 追求极致的网站性能
  • WordPress 优化信息图
  • 使您的 WP 网站加载速度更快的 21 个简单调整
  • 如何通过图像优化加速 WordPress 网站
  • 将 WordPress 加载速度从 4.23 秒加速到 1.33 秒(案例研究)
  • 更好地优化 WordPress 的 10 个技巧
  • 如何通过在 Apache 中压缩 (deflate/gzip) 您的 HTML、Javascript、CSS、XML 等来使您的网站快如闪电*
  • 雅虎!开发者网络:卓越的性能

WordCamp 性能演示

  • 高性能 WordPress = Iliya Polihronov
  • 来自 WordCamp Israel 2013 的 WordPress 优化
  • HyperDB 和高性能演示的 WordCamp 2007 视频
  • 关于 HyperDB 和高性能的幻灯片副本
  • 50 条提示 su Web Performance Optimization per siti ad alto traffico WordCamp Bologna(意大利)2013

变更日志

  • 2022-09-11:来自优化的原始内容。