通过 PHP OPcache 让你的 Laravel 应用飞起来
来源:原创 时间:2017-06-21 浏览:0 次
啥是 Opcache
每一次履行 PHP 脚本的时分,该脚本都需求被编译成字节码,而 OPcache 能够对该字节码进行缓存,这么,下次恳求同一个脚本的时分,该脚本就不需求从头编译,这极大节省了脚本的履行时间,然后让运用运转速度更快,一起也节省了服务器的开支。
用数字说话
咱们当然很想知道究竟进行了如何的优化,虽然功能提高高度依赖于运用和服务器的装备,不过咱们能够经过运转基准测验(benchmark)有一个大约的了解。
为此我专门预备了一个很低装备的机器:1核CPU,1G内存来运转 Apache 基准测验。我恳求的是 Laravel 5.4 默许的期待页面,让 10 个并发恳求持续拜访 1 分钟,以下是封闭 OPcache 的基准测验成果:
OPcache disabled: 10.18 requests per second
关于一个这么低装备的服务器而言,这也不算太坏,可是咱们能够做得非常好。敞开 OPcache 的基准测验成果如下(运用默许 OPcache 装备):
Enabled with default values: 34.52 requests per second
距离仍是很大的!咱们接下来对 OPcache 装备进行优化,基准测验的体现作用非常好:
Enabled with optimized values: 42.53 requests per second
这把服了没有?
听起来很牛逼,不过怎样运用呢
首要,咱们需求保证在服务器上装置了 OPcache,从 PHP 5.5 开端,OPcache 现已成为 PHP 中心的一部分,所以关于 Laravel 开发者而言,基本上不需求手动去装置这个拓展。
当然,假如不放心,能够经过查看 phpinfo() 进行承认:
该脚本会显现一切 PHP 装置的拓展。在页面查找 “OPcache”,假如找到,证实现已装置。假如没有,则需求自个去装置。
接下来,咱们需求在 PHP 的装备文件中启用 OPcache(默许是封闭的):
opcache.enable=1
下面咱们持续对 OPcache 进行一些优化装备:
opcache.memory_consumption=512
这个装备表明你想要分配给 OPcache 的内存空间(单位:MB),设置一个大于 64 的值即可。
opcache.interned_strings_buffer=64
这个装备表明你想要分配给实践字符串的空间(单位:MB),设置一个大于 16 的值即可。
opcache.max_accelerated_files=32531
这个装备表明能够缓存多少个脚本,将这个值尽也许设置为与项目包括的脚本数挨近(或更大)。
opcache.validate_timestamps=0
改装备值用于从头验证脚本,假如设置为 0(功能最好),需求手动在每次 PHP 代码更改后手动铲除 OPcache。假如你不想要手动铲除,能够将其设置为 1 并经过 opcache.revalidate_freq 装备从头验证距离,这也许会耗费一些功能,由于需求每隔 x 秒查看更改。
opcache.save_comments=1
这个装备会在脚本中保留注释,我引荐敞开该选项,由于一些库依赖于这个装备,而且我也找不出啥封闭它的优点。
opcache.fast_shutdown=0
迅速封闭会给一个更迅速整理内存的机制,不过,在我的基准测验中,更慢一些,也许这会运用带来一些功能提高,可是你需求自个去测验。
所以,终究的装备优化长这么:
opcache.enable=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=32531
opcache.validate_timestamps=0
opcache.save_comments=1
opcache.fast_shutdown=0
你能够运用这些装备值进行试验,详细装备值取决于你的运用巨细和服务器装备。
最终,保留这个装备文件并重启 Web 服务器,你的运用肯定会变得更快。
预备好 Laravel 运用
前面说到,opcache.validate_timestamps 设置为 0 的话咱们需求在每次修正 PHP 代码后手动铲除 OPcache。为此我创建了一个拓展包来供给相应的 Artisan 指令处理 OPcache 整理事宜:https://github.com/appstract/laravel-opcache。
装置完拓展后,只需履行如下指令即可整理 OPcache: