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

发布时间 - 2020-04-22 00:00:00    点击率:

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

php artisan opcache:clear

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

本文系转载,原文地址:https://xueyuanjun.com/post/7326


# laravel  # 设置为  # 你可以  # 我们可以  # 更快  # 你想要  # 配置文件  # 的是  # 我也  # 不出  # 不需要 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  昵图网官网入口 昵图网素材平台官方入口  网站制作大概多少钱一个,做一个平台网站大概多少钱?  如何在Ubuntu系统下快速搭建WordPress个人网站?  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  jQuery validate插件功能与用法详解  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  如何在建站之星网店版论坛获取技术支持?  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  linux写shell需要注意的问题(必看)  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  android nfc常用标签读取总结  使用Dockerfile构建java web环境  Laravel如何实现本地化和多语言支持?(i18n教程)  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  清除minerd进程的简单方法  Laravel如何保护应用免受CSRF攻击?(原理和示例)  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  无锡营销型网站制作公司,无锡网选车牌流程?  中山网站制作网页,中山新生登记系统登记流程?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  Python3.6正式版新特性预览  如何安全更换建站之星模板并保留数据?  Laravel如何实现用户注册和登录?(Auth脚手架指南)  php打包exe后无法访问网络共享_共享权限设置方法【教程】  Laravel中的Facade(门面)到底是什么原理  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  如何基于云服务器快速搭建网站及云盘系统?  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  如何快速搭建支持数据库操作的智能建站平台?  七夕网站制作视频,七夕大促活动怎么报名?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  三星、SK海力士获美批准:可向中国出口芯片制造设备  Bootstrap整体框架之JavaScript插件架构  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何制作一个表白网站视频,关于勇敢表白的小标题?  文字头像制作网站推荐软件,醒图能自动配文字吗?  javascript读取文本节点方法小结  jquery插件bootstrapValidator表单验证详解  中山网站推广排名,中山信息港登录入口?  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  制作电商网页,电商供应链怎么做?  javascript日期怎么处理_如何格式化输出  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在IIS服务器上快速部署高效网站?