目录
- 什么是 PHP 加速器?
- 最好的 PHP 加速器
- 安装和配置 PHP OPcache
- 总结
PHP 加速器大大提高了基于 PHP 的软件(如 WordPress)的性能。只有通过 PHP 加速器,才能运行由 PHP 应用程序提供支持的高流量站点。它们的性能优势差异很大,因为它取决于多种因素,包括您可能需要在网站上应用的其他优化。
在本文中,您将了解 PHP 加速器的工作原理、为什么需要它们、哪些 PHP 加速器最适合您的 WordPress 网站,以及如何安装和配置它们。
兴奋?让我们开始吧!
什么是 PHP 加速器?
PHP 加速器是一种 PHP 扩展,可以提高 PHP 应用程序的性能。这些扩展通过缓存 PHP 文件生成的作码(或作代码)来工作。因此,PHP 加速器也称为作码缓存。

PHP 脚本是用人类可读的语法编写的,但服务器(或中央处理单元)无法直接理解此代码。需要将其转换为服务器可以直接读取的格式。这就是 Opcode 的用武之地。
Opcode 是机器语言指令的一部分,用于指导服务器执行哪些作。通常,这些说明相当简单,例如添加两个数字或连接两个或多个字符串。机器语言指令的其他部分包括作数,即作码作的项目。
每次用户在您的网站上请求某些内容时,从 PHP 脚本生成作码可能会对您的 Web 服务器造成沉重的负担。首先,需要对脚本进行标记化和解析,以生成抽象语法树 (AST),然后对其进行编译以创建作码。
在某些极端情况下,此过程可能会使您的网站对许多用户造成阻碍。如果请求数量很大,则许多用户的服务器会超时,从而完全锁定他们无法访问网站。
您可以通过在生成作码后将其存储为缓存 (OpCache) 来绕过此问题。然后,您可以直接将其提供给所有后续用户,而无需服务器参与。这正是 PHP 加速器的作用。
在安装和配置 PHP 加速器后,WordPress 网站的速度提高了两到三倍(或更多)并不罕见。
最好的 PHP 加速器
PHP 于 1995 年推出,使其成为当今现存最古老的服务器端语言之一。在其整个生命周期中,已经为它实现了很多加速器(作码缓存),但对于在 Linux 上运行的服务器设置,主要只有一个维护良好且有用的解决方案:PHP OPcache。
对于在 Windows 和 Windows Server 上运行的 PHP 应用程序,有一个名为 Windows Cache Extension for PHP 的替代 PHP 加速器。此外,还有许多扩展可以向 PHP 的内置作码缓存添加功能。我将在本文中介绍所有这些。
PHP OPcache (Zend OPcache)
PHP OPcache 扩展通过作码缓存和其他优化技术使 PHP 代码执行得更快。它与 PHP 5.5 及更高版本捆绑在一起。
PHP OPcache 也被称为 Zend OPcache,因为它是 Zend 的作码缓存扩展的实现。Zend 一直保持此扩展的专有性,直到 PHP 5.5 发布。因此,对于许多用户来说,替代 PHP 缓存 (APC) 是 PHP 中作码缓存的首选解决方案。
在 Zend 开源了他们的作码缓存代码并将其作为名为 Zend OPcache 的扩展发布后,PHP 5.5 将其作为其核心的一部分,并从那时起一直将其用作默认的作码缓存解决方案。

PHP OPcache 通过在首次执行任何 PHP 脚本时将预编译的字节码存储在服务器的共享内存中来提高性能。这样就无需读取和编译 PHP 代码以供将来访问。PHP OPcache 还应用了额外的字节码优化模式,以加快 PHP 代码的执行速度。
APC 用户缓存 (APCu)
Alternative PHP Cache (APC) 是一个免费的开源 PHP 加速器。与 Zend OPcache 一样,它主要旨在将 PHP作码输出缓存在服务器的共享内存中。由于它一直是 FOSS,因此直到几年前,它仍然是 PHP 最流行的作码缓存解决方案。
在 PHP OPcache 成为 PHP 5.5 的一部分后,APC 的开发速度大大减慢,现在被认为已经死了。但是,某些 APC 功能在 PHP OPcache 中仍然不可用。其中之一是用户空间共享内存缓存功能。它也称为 “内存数据缓存”。
为了解决这个问题,APC 开发人员剥离了它的所有作码缓存功能,并将其作为名为 APCu 的单独扩展发布。它添加了对 PHP 变量的用户空间缓存的支持。
您还可以安装 APCu 向后兼容模块,以便在现代版本的 PHP 中使用 APCu 作为 APC 的替代品。
稍后您将学习如何在服务器上启用和配置 PHP OPcache 和 APCu。
适用于 PHP 的 Windows 缓存扩展
Windows Cache Extension for PHP 是一个 PHP 加速器,可加速 Windows 和 Windows Server 上的 PHP 软件。它不包括对作码缓存的支持,因为 PHP 已经将其包含在其核心中,但它包括 4 种独特的缓存类型:
- File Cache — PHP OPCache 只缓存 PHP 脚本生成的作码。PHP 引擎仍然必须访问服务器上的脚本文件。执行文件作可能会导致显著的性能开销,因此此扩展包括一个文件缓存,该缓存可以将 PHP 脚本存储在共享内存中。
- Resolve File Path Cache (解析文件路径缓存) — 大多数 PHP 脚本使用相对文件路径来引用每个唯一的文件。PHP 引擎必须将这些转换为绝对文件路径才能访问它们。如果像这样引用了大量文件,则可能会导致性能问题。此扩展预先存储所有相对和绝对文件路径的映射,以便 PHP 引擎不会花费太多时间解析文件路径。
- User Cache (用户缓存) — 此缓存的工作方式类似于 APCu 的用户空间共享内存缓存。PHP 脚本可以使用用户缓存 API 将对象和变量存储在用户缓存中,并在后续请求中重复使用它们。它不仅提高了 PHP 脚本的性能,而且还允许 PHP 引擎在多个 PHP 进程之间共享数据。
- Session Handler (会话处理程序) — 这将 PHP 会话数据存储在服务器的共享内存中,以避免执行文件系统作来读取和写入会话数据。如果在单个 PHP 会话中生成大量数据,这将很有帮助。
大多数 WordPress 安装使用 Linux 服务器。如果您是使用 Windows Server 运行您的站点的十几个用户之一,您可以在其在线手册中了解有关安装和配置 WinCache 的更多信息。
安装和配置 PHP OPcache
对于 PHP 5.5 及更高版本,PHP 在 PHP 安装过程中默认将 OPcache 编译为共享扩展。但是,如果您在安装 PHP 时指定了 –disable-all 指令,则需要通过指定 –enable-opcache 指令来显式允许 OPcache。
编译 OPcache 扩展后,您需要启用它并配置其变量。
您必须使用 zend_extension 指令来启用 OPcache 扩展。为此,请将以下所有代码添加到您的 php.ini 文件中。
zend_extension=/full/path/to/opcache.so
注意:如果你有一个非标准的服务器安装,并且不知道完整的路径,那么你可以指定 extension_dir 指令来告诉 PHP 在该目录中查找动态加载的扩展。此外,对于基于 Windows 的安装,路径为 C:\path\to\php_opcache.dll。
启用 OPcache 后,您需要应用正确的设置以获得最佳性能。对于大多数使用案例,您可以将以下设置添加到 php.ini 文件中:
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
以下是所有指令及其作用的细分:
- opcache.memory_consumption:设置可用于 OPcache 的共享内存存储的大小。该值以 MB 为单位指定,PHP 7.0 及更高版本的默认值为 128,但如果需要,您可以设置更多。
在更改此值之前,请确保您的服务器有足够的共享内存空间用于 MySQL 等其他服务。
- opcache.interned_strings_buffer:指定可用于存储暂存字符串的内存量。字符串暂存是一种性能优化方法,其中每个不同字符串的一个副本仅存储在内存中,从而使字符串处理任务节省空间和时间。
其默认值为 8 MB。如果您在网站上运行大量代码,则可以将其值增加到 16。
- opcache.max_accelerated_files:定义 OPcache 哈希表中可以存储的最大 PHP 脚本数。它的最小值是 200,但在 PHP 5.5.6 及更高版本中可以将其设置为1000000。您应该注意,OPcache 使用的实际值将是与该值最接近的第一个素数,而不是值本身。
要找到要在此处设置的完美值,您可以通过运行
find . -type f -print | grep php | wc -l
命令。将此指令的值设置为大于服务器上的 PHP 文件计数。对于大多数 WordPress 安装实例,将其设置为 10000 将是理想的。
- opcache.revalidate_freq:指示 OPcache 需要多久检查一次脚本时间戳是否有任何更新。其值以秒为单位设置。如果将其设置为 0,则 OPcache 将检查每个请求的更新,这相当于没有启用任何作码缓存。
如果您的站点上没有很多频繁的更新,则可以将此值设置为 3600 秒。出于开发目的,您可以通过将 opcache.validate_timestamps 指令设置为 0 来禁用 by feature。
- opcache.fast_shutdown:启用 OPcache 的快速关闭序列。它加快了 PHP worker 的响应和回收时间,以便它们立即准备好处理其他请求。OPcache 通过使用 Zend Engine 内存管理器一次性取消分配所有请求来实现这一点。
从 PHP 7.2 开始,该指令的一个变体已被集成到核心 PHP 中,并将尽可能自动使用。
- opcache.enable_cli:为 PHP 的 CLI 版本启用作码缓存。将标志设置为 1 将在您的服务器上启用作码缓存。您可以通过将作码缓存的标志设置为 0 来禁用用于开发和测试的作码缓存。
有关可以使用的 OPcache 指令的更多详细信息和定义,请参阅 PHP OPcache 的运行时配置手册。如果要在开发和生产阶段之间切换,则建议熟悉所有 OPcache 指令,以最大限度地利用它们。
检查 PHP OPcache 状态
您可以通过运行 opcache_get_status() 函数来检查服务器上 OPcache 的状态。
如果你的服务器上启用了 OPCache,它将返回一个包含所有作码缓存属性的数组。下面是此函数的示例输出。但是,如果您的服务器上禁用了 OPcache,那么它只会返回 false。
您可以将可选的 get_scripts 参数插入此函数,以获取特定于脚本的状态信息。或者,您也可以使用 opcache_get_configuration() 函数来获取 OPcache 的配置信息,包括 INI、黑名单和正在使用的 OPcache 版本。
有关所有 OPcache 函数的详细列表,可以参考 PHP OPcache 函数手册。
监控和管理 PHP OPcache
有很多 PHP 扩展,可让您通过图形界面轻松管理 OPcache 功能。为此,最推荐的两个扩展是 OpCacheGUI 和 opcache-gui(名称相似,但扩展不同)。

虽然 OpCacheGUI 是两者中更好看的扩展,但 opcache-gui 扩展会定期更新以使用最新的 PHP 版本。您可以使用它们中的任何一个轻松管理和监控 PHP OPcache。

安装和配置 APCu
您可以从 PECL 存储库或直接从 PHP 安装 APCu 扩展。在终端中运行以下命令以开始使用:
sudo apt-get install php7.3-apcu
注意:根据您的 PHP 版本,您需要使用正确的指令。这里是 PHP 7.3,但您的服务器上可能安装了不同的 PHP 版本。
在安装过程中,您可能会遇到有关如何在服务器上配置 APCu 的问题。选择所有这些的默认值。
接下来,检查 php.ini 文件并添加以下行(如果 PHP 尚未添加)。
extension=apcu.so
这将在重新启动服务器后启用 apc.so 模块。对于在 NGINX 上运行的服务器,您必须使用以下命令:
sudo service php7.3-fpm restart
sudo service nginx reload
如果您的服务器使用的是 Apache,则可以使用以下命令:
sudo service apache2 reload
默认 APCu 设置非常适合大多数设置,包括 WordPress 安装。但是,如果您正在考虑对它们进行微调,则可以阅读所有可用的 APCu 配置选项。
例如,apcu.shm_size 指令默认设置为 32M。如果您发现 APCu 在共享内存上分配的空间不足,则可以通过在 php.ini值中添加带有自定义值的 apcu.shm_size 指令来为 APCu 分配更多空间。
注意:PHP 7+ 版本上的 APCu 与 APC 不完全向后兼容。如果需要,则还需要从 PECL 存储库安装 APCu 向后兼容性 (apc-bu) 扩展。
有关 APCu 的更深入、高度技术性的信息,您可以查看其 TECHNOTES 文档。
总结
PHP 的默认 OPcache 功能为 WordPress 网站提供了显着的性能改进。大多数时候,速度增益高达 3 倍。如果您有一个中高流量站点,那么强烈建议在您的服务器上启用作码缓存。此外,如果您想修复缓慢的 WordPress 管理员,它们可能会有所作为。
至于最好的 PHP 加速器,今天只有一个可以完美地用于作码缓存,那就是 PHP 的内置 OPcache。您还可以安装 APCu PHP 扩展以利用其用户空间共享内存缓存功能。
我希望这篇文章能回答你关于 PHP 加速器的所有问题。现在就开始加速您的网站吧!