OPcache PHP启动优化

对于基于WordPressJoomlaLaravel且没有特定于用户的内容的网站,建议将所有页面保留在静态HTML缓存中,并且仅在后端进行更改时才手动(或自动)重新生成缓存。 但是,如果页面包含取决于会话和Cookie或语言和位置的动态内容,则OPcache是​​合适的


对于新安装的CentOS7服务器(带有SSD和PHP 7.1),上述三个系统的所谓启动时间均超过100毫秒。 每次执行PHP脚本时,都必须在运行时将其编译为字节码。 现在,OPcache为此字节码实现了缓存-如果在下一个请求中执行相同的PHP脚本,则不必重新编译它。 激活OPcache后,我们设置以下设置:

9006cec6c5d3d2498ee26c5bfd91590a

执行时间(平均超过10次执行)现在已大大减少:

WordPress 4.7.4 Joomla 3.7 Laravel 5.4
没有OPcache 295毫秒 201毫秒 110毫秒
与OPcache 54毫秒 59毫秒 13毫秒
因子 5,5 3,5 8,5

由于我们将validate_timestamps设置为0,同时将revalidate_freq设置为一天的时间,因此几乎永远不会自动重建缓存(我们有意识地手动执行了此操作)。 用一个小的git hook ,每个“拉”都会执行一个PHP脚本。 如何激活挂钩:

a1678610c8b4c7db5997375944183830

a1678610c8b4c7db5997375944183830

以下帮助程序功能也有助于测量单个代码部分(或整个执行时间):

085f4291bbcc4e8a64bbea951ff49ab9

如果您想获取有用的信息,例如状态,已用内存或缓存的文件数,则可以使用此PHP函数:

3f6309d04bc7e48dd909859321b96209

为了在本地开发环境中使用OPcache(通常不建议这样做),我们使用了一个技巧。

OPcache在所有安装了OPcache模块且未显式设置opcache.enable设置的服务器上均处于活动状态。 我们就这样离开。 我们仅在php.ini中设置opcache.validate_timestamps = 1,这意味着opcache.revalidate_freq = 2我们实现了几乎对每个项目都连续不断地重新验证OPcache。 对于我们要永久激活OPcache的项目,我们使用与项目相关的 在.htaccess中进行以下设置:

1dd64a3f2fe4425b29b1409410fe3fc0

然后,我们重新启动Web服务器并创建以下脚本:

91fb5289160e410607c9ea89112a575b

该脚本清除缓存并同时重建它。 现在,在我们最喜欢的编辑器VSCode中设置与工作区相关的RunOnSave命令:

91fb5289160e410607c9ea89112a575b

背部