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

什么是 opcache

每一次执行 PHP 脚本的时候,该脚本都需要被编译成字节码,而 OPcache 可以对该字节码进行缓存,这样,下次请求同一个脚本的时候,该脚本就不需要重新编译,这极大节省了脚本的执行时间,从而让应用运行速度更快,同时也节省了服务器的开销。

用数字说话

我们当然很想知道到底进行了怎样的优化,尽管性能提升高度依赖于应用和服务器的配置,不过我们可以通过运行基准测试(benchmark)有一个大概的了解。

为此我专门准备了一个很低配置的机器:1核CPU,1G内存来运行 Apache 基准测试。我请求的是 Laravel 5.4 默认的欢迎页面,让 10 个并发请求持续访问 1 分钟,以下是关闭 OPcache 的基准测试结果:

立即学习“PHP免费学习笔记(深入)”;

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() 进行确认:

<?phpphpinfo();

该脚本会显示所有 PHP 安装的扩展。在页面搜索 “OPcache”,如果找到,证明已经安装。如果没有,则需要自己去安装。

接下来,我们需要在 PHP 的配置文件中启用 OPcache(默认是关闭的):

opcache.enable=1

下面我们继续对 OPcache 进行一些优化配置:

AppMall应用商店 AppMall应用商店

AI应用商店,提供即时交付、按需付费的人工智能应用服务

AppMall应用商店 56 查看详情 AppMall应用商店

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=1opcache.memory_consumption=512opcache.interned_strings_buffer=64opcache.max_accelerated_files=32531opcache.validate_timestamps=0opcache.save_comments=1opcache.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 应用运行速度飞起来!(利用PHP OPcache)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/491121.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 15:41:42
下一篇 2025年11月8日 15:42:38

相关推荐

  • PHP怎样实现自动结算系统?每日收益统计发放

    实现php自动结算系统的核心在于通过定时任务、严谨的数据库设计和可靠的业务逻辑实现每日收益的自动化统计与发放;2. 系统通过cron job每日自动执行php脚本,从transactions表中聚合前一天的成功交易数据,按用户汇总并写入daily_earnings表;3. 根据预设结算规则判断符合条…

    2025年12月11日
    000
  • PHP怎样优化OPcache?PHP加速配置技巧

    opcache通过缓存php脚本的预编译opcode,避免重复解析和编译,显著提升性能;2. 核心配置包括opcache.enable=1、memory_consumption根据项目设256-512mb、max_accelerated_files设为文件数1.5-2倍、validate_times…

    2025年12月11日
    000
  • PHP如何创建在线租赁平台?押金与租金计算

    处理租赁期间商品损坏的核心是建立明确的规则与保障机制,1、在租赁协议中清晰界定损坏赔偿标准,如按损坏程度扣除部分或全部押金;2、要求用户租赁前进行实名认证以提高违约成本;3、可引入保险机制,为商品购买保险以分摊平台与用户风险;4、平台应提供便捷的损坏申报与评估流程,确保处理公正透明,最终保障交易双方…

    2025年12月11日
    000
  • PHP如何开发二级域名分销系统?白标解决方案

    实现动态二级域名解析与路由需配置dns泛解析(*.yourmaindomain.com指向服务器ip)并结合nginx或apache的虚拟主机匹配请求,通过正则捕获二级域名作为租户标识,再由php从$_server[‘http_host’]提取并识别租户;2. 多租户数据管理…

    2025年12月11日
    000
  • PHP如何实现WebSocket服务?Ratchet应用实例

    要实现php的websocket服务,必须使用异步i/o框架突破传统请求-响应模式的限制,1. 可通过ratchet等库创建常驻内存的php进程来监听端口并处理长连接;2. ratchet依赖reactphp的事件循环机制,采用分层架构(ioserver、httpserver、wsserver)实现…

    2025年12月11日
    000
  • PHP如何开发股票分析平台?付费数据接口提供

    选择付费数据接口时,需重点考量数据覆盖范围与粒度、接口稳定性与响应速度、并发限制及费用模式;2. 集成时应使用guzzle等http客户端封装api请求,妥善处理认证、错误与限流;3. 数据存储需设计合理的数据库结构并建立关键索引,历史数据通过定时任务批量导入,实时数据采用拉取+缓存策略,结合red…

    2025年12月11日
    000
  • PHP怎样开发众筹平台?项目筹资与回报发放

    众筹平台开发需采用php+mysql为基础,结合laravel或symfony框架及vue.js或react前端技术,合理设计数据库并使用redis等缓存技术提升性能;2. 安全性保障需通过https传输、bcrypt加密密码、参数化查询防sql注入、输入过滤防xss攻击及定期漏洞扫描来实现;3. …

    2025年12月11日
    000
  • PHP如何创建在线招标平台?保证金管理方案

    php构建在线招标平台完全可行,核心在于mvc架构(如laravel)、数据库设计(含用户、项目、保证金表)及第三方支付集成;2. 保证金管理需通过支付平台担保交易实现资金隔离,确保支付冻结、状态追踪、自动退款、违约扣除的全流程可控;3. 技术栈包括laravel/vue.js、mysql/redi…

    2025年12月11日
    000
  • PHP如何发送电子邮件?PHPMailer使用教程

    phpmailer相比mail()函数的优势在于支持smtp认证和加密、提供详细错误报告、支持html邮件与附件等富内容、兼容性更好且有活跃社区维护;2. 处理phpmailer常见错误需检查smtp配置(host、port、username、password、加密方式)、启用smtpdebug调试…

    2025年12月11日
    000
  • PHP文件作为前端API与后端模块的通用实践

    本文旨在探讨如何设计一个PHP文件,使其能够同时作为前端AJAX请求的API接口,并作为后端脚本被其他PHP文件引入以调用其内部函数。核心在于通过条件判断来区分前端API调用和后端模块引入,从而避免不必要的代码执行,实现代码的有效复用和职责分离。 一、问题背景与挑战 在PHP开发中,我们常常会遇到一…

    2025年12月11日
    000
  • PHP怎样制作分页功能?LIMIT分页算法实现

    制作php分页功能的核心是使用mysql的limit子句实现数据分块加载,1. 获取总记录数以计算总页数;2. 定义每页显示条数;3. 从get参数获取并验证当前页码;4. 计算偏移量(($currentpage – 1) * $recordsperpage);5. 构建并执行带limi…

    2025年12月11日
    000
  • 解决SQL外键约束失败:1452错误指南

    本文旨在深入解析SQLSTATE[23000]: Integrity constraint violation: 1452外键约束失败错误。该错误通常发生在尝试插入或更新子表数据时,但其关联的父表记录不存在,或者外键与主键的数据类型/长度不匹配。教程将详细阐述错误原因、诊断方法,并提供针对性的解决方…

    2025年12月11日
    000
  • VSCode怎样创建PHP项目文件夹并管理文件 VSCode新手管理PHP项目文件的操作方法​

    vscode创建php项目需先在文件系统创建项目文件夹如my_php_project;2. 在vscode中通过“文件 > 打开文件夹”导入该文件夹,形成工作区;3. 在资源管理器中右键创建php文件如index.php;4. 安装php intelephense和php debug等扩展以获…

    2025年12月11日
    000
  • PHP如何创建付费问答社区?专家咨询服务变现

    创建一个基于PHP的付费问答社区,本质上是在搭建一个连接专业知识与需求用户的桥梁,并通过这种连接实现价值交换。这事儿说起来简单,真要落地,得考虑不少细节,从技术选型到商业模式,再到社区运营,环环相扣。 要构建一个这样的平台,核心在于选择一个稳健的PHP框架,比如Laravel或Symfony,它们能…

    2025年12月11日
    000
  • 如何用PHP开发RESTful API PHP API设计的原则与实现

    选择合适的php框架需根据项目需求和团队熟悉度决定:1. 若追求快速开发,可选laravel或symfony等全栈框架,它们提供路由、orm、认证等开箱即用功能;2. 若项目轻量或需更高灵活性,可选slim或lumen等微框架,它们核心轻量,便于自定义集成;3. 优先选择团队熟悉的框架以降低学习成本…

    2025年12月11日
    000
  • 解决Laravel中外键约束错误1452:数据完整性与导入策略

    当在Laravel应用中遇到SQLSTATE[23000]: Integrity constraint violation: 1452错误时,通常表示尝试向子表插入或更新数据时,其外键引用的父表记录不存在。这常见于批量数据导入场景,核心原因在于子表外键字段的值在父表中找不到对应的主键值,或两者数据类…

    2025年12月11日
    000
  • VSCode怎样设置PHP文件的默认打开方式 VSCode新手设置PHP文件默认打开的简单步骤​

    将vscode设为php文件默认打开方式最直接的方法是通过操作系统设置:windows系统右键php文件选择“打开方式”并勾选“始终使用此程序”;macos在“显示简介”中更改“打开方式”并点击“全部更改”;linux在文件属性中设置默认应用。2. vscode内部的files.associatio…

    2025年12月11日
    000
  • PHP框架底层原理剖析:自己写MVC 从零实现一个简易PHP框架的完整过程

    自己从零开始实现php框架的核心价值在于彻底理解请求处理流程和数据流转机制;2. 一个简易mvc框架必须包含入口文件、自动加载器、请求与响应类、路由器、控制器、模型和视图七大核心组件;3. 构建过程中常见挑战包括路由设计、依赖管理、错误处理及安全性能问题,应通过逐步迭代、引入依赖注入、统一异常处理和…

    2025年12月11日
    000
  • PHP安全编程必知:防止XSS攻击 在PHP中过滤和转义用户输入的完整方案

    防止XSS攻击,核心在于对所有来自外部的、不可信的用户输入进行严格的过滤(清除潜在恶意代码)和正确的转义(使特殊字符失去其原有含义,变为普通文本)。这不仅仅是简单的函数调用,更是一种深入骨髓的安全意识和多层防御的实践。在我看来,任何一个有用户输入的PHP应用,都必须把这一点刻在骨子里。 解决方案 要…

    2025年12月11日 好文分享
    000
  • 解决MySQL外键约束冲突:1452错误深度解析与实践

    当在MySQL数据库中遇到“Integrity constraint violation: 1452 Cannot add or update a child row”错误时,通常意味着您正在尝试向子表插入或更新数据,但其外键引用的父表中的对应主键值不存在,或者外键列与被引用列的数据类型或长度不匹配…

    2025年12月11日
    000

发表回复

登录后才能评论
关注微信