对于基于WordPress , Joomla或Laravel且没有特定于用户的内容的网站,建议将所有页面保留在静态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