通过 PHP OPcache 让你的 Laravel 应用运行速度飞起来

栏目: PHP · 发布时间: 7年前

内容简介:通过 PHP OPcache 让你的 Laravel 应用运行速度飞起来

通过 PHP OPcache 让你的  <a href='https://www.codercto.com/topics/5169.html'>Laravel</a>  应用运行速度飞起来

什么是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
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:

php artisan opcache:clear

此外,改扩展包还提供了一些其他有用的工具,你可以在项目的 GitHub页面 上看到。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Data Mining

Web Data Mining

Bing Liu / Springer / 2011-6-26 / CAD 61.50

Web mining aims to discover useful information and knowledge from Web hyperlinks, page contents, and usage data. Although Web mining uses many conventional data mining techniques, it is not purely an ......一起来看看 《Web Data Mining》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码