欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

让你的Laravel 应用运行速度飞起来!(利用PHP OPcache)

程序员文章站 2022-09-03 21:04:12
什么是 Opcache 每一次执行 PHP 脚本的时候,该脚本都需要被编译成字节码,而 OPcache 可以对该字节码进行缓存,这样,下次请求同一个脚本的时候,该脚本就不需要重新编译,这极大节省了脚本的执行时间,从而让应用运行速度更快,同时也节省了服务器的开销。 用数字说话 我们当然很想知道到底进行 ......

什么是 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 清理事宜:

安装完扩展后,只需执行如下命令即可清理 opcache:

php artisan opcache:clear 

  

更多学习内容请访问:

腾讯t3-t4标准精品php架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)