打开 PHP OPcache, 让你的 Laravel 应用程序速度飞快

翻译 Summer ⋅ 于 6个月前 ⋅ 最后回复由 dope2008 1个月前 ⋅ 3131 阅读 ⋅ 原文地址

站点的翻译文章创建时,您将第一时间收到通知。

这是一篇社区协同翻译的文章,已完成翻译,更多信息请点击 协同翻译介绍

file

OPcache 是什么?

当我们每次执行 PHP 脚本时,该脚本须要被编译成字节码。OPcache 的作用是将这些字节码缓存起来,这样当下一次同样的脚本被执行时,便无需再重新编译一遍。这样可以节省宝贵的脚本执行时间,让项目运行的更快(同时也可节省一些服务器成本)。

Jeffrey00 翻译于 6个月前

查看其他 1 个版本

用数据说话

当然我们想要知道我们谈论的是哪种优化. 性能的提高很大程度上取决于您的应用程序和服务器配置, 但我们可以快速运行一个 benchmark 来获得我们的想法.

所以我弄了一台 1 CPU and 1 GB RAM 的小型 DO droplet (即 DigitalOcean 服务器 ) 并且运行 Apache Benchmark. 我请求了Laravel 5.4的默认欢迎页面,让 benchmark 运行1分钟,并发连接数为10:

OPcache disabled: 10.18 requests per second

对于这样一个小型服务器来说这还不算坏, 但我们可以做得更好

Enabled with default values: 34.52 requests per second

不同凡响! 让我们看看我们能否进一步加码.

Enabled with optimized values: 42.53 requests per second

信了么?

GhostCoder 翻译于 6个月前

听起来很棒,我怎么用呢?

在我们做任何事情之前,我建议您先在一台开发/登台机器上测试所有的东西,然后再在一台服务器上进行测试。

首先,我们需要确保在我们的服务器上安装了OPcache。如果您有一个最近的服务器配置,那么OPcache已经安装好了,因为它在不同的提供者之间变得更加常见。如果您使用Laravel Forge,它已经安装并启用了(至少在最近的版本中)。

为了检查是否安装了它,我们可以运行一个简单的PHP脚本:

<?php

phpinfo();
何夕 翻译于 6个月前

查看其他 1 个版本

这里展示出你 PHP 安装的所有信息,在这里搜索 OPcache,如果搜到了,确认已经安装。

如果没有安装,在网上搜索安装指导,或者在服务器提供商的论坛/帮助部分搜索安装说明。

现在确保已经安装好了,我们可以调整配置以最大程度地利用它。

> 在 Laravel forge 上选择 *files -> Edit PHP FPM configuration * 在服务器的预览页面打开 PHP 的配置文件
> 在其他服务器,你需要找到加载的 .ini 文件,它就是刚才 phpinfo() 打印出页面的 'Loaded Configuration File'项 。使用你喜爱的编辑器打开。

Flyertutor 翻译于 6个月前

现在我们看一些可配置的值,我讲一些比较重要的选项。确保他们要放在你配置文件 [opcache] 的下面。

opcache.enable=1

开启. opcache

opcache.memory_consumption=512

你想分配给 .opcache 多少M。根据你的需要选择一个高于 64M (默认值)的值。

opcache.interned_strings_buffer=64

你想分配存储预留字符串的内存多少M. 选择一个高于 16M (默认值) 的值

opcache.max_accelerated_files=32531
OPcache 哈希表中可存储的脚本文件数量上限

Flyertutor 翻译于 6个月前

有多少个脚本可以被缓存。使其尽可能接近(或更多)到您的项目中的脚本数量。选择以下任何值:3907,7963,16229,32531,65407,130987(请参阅文档以获得解释: (http://php.net/manual/en/opcache.configuration.php#ini.opcache.max-accelerated-files))

opcache.validate_timestamps=0

这将重新验证脚本。如果你把它设置为 0(最好的性能),你需要在每次 PHP 代码改变时手动清除 OPcache(我们将在下一节中处理这个)。如果您不想自己清除它,可以将其设置为 1 ,并使用 opcache.revalidate_freq 配置重新生效时间间隔,这会花费您一些性能,因为它需要每 10 秒检查一次更改。

opcache.save_comments=1

这将保留在你的脚本中的评论,我建议保持启用,因为一些类库依赖它,并且我也没有找到禁用它所带来的的任何好处(除了保存几个字节的RAM)。

opcache.fast_shutdown=0

快速关机可以提供一个更快的内存清理机制。不过,在我的基准测试中,速度有点慢。但也许它可以改善你的应用程序,你应该尝试一下。

Ellison 翻译于 6个月前

所以我的最终配置如下:

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

试下这些设置值, 具体取决于应用程序的大小和服务器的资源. 你可以查看你的使用量和状态通过我的 OPcache 扩展包 (更多内容请参见下一节) 并根据情况更改配置的值.

现在保存该文件并重新启动你的Web服务器. 你的应用程序现在应该更快了!

GhostCoder 翻译于 6个月前

准备好你的 Laravel App

正如前面提到的,当我们修改 PHP 代码时需要手动清除 OPcache,我构建了一个很便利的包让你使用 artisan 命令去操作 OPcache

按照下面的说明进行安装 repo: github.com/appstract/laravel-opcache
接下来,把该命令添加到部署脚本的结尾处(我将它放在 artisan up 命令的后面)php artisan opcache:clear

该包还包含 OPcache 一些非常有用的工具,你可以在 Github 上面阅读到更多关于它的信息。

Flyertutor 翻译于 6个月前

原文地址:https://medium.com/appstract/make-your-l...

译文地址:https://laravel-china.org/topics/7458/op...


本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

本帖已被设为精华帖!
回复数量: 6
  • wujunze talk is cheap show me the code
    6个月前

    协同翻译不错啊 人多力量大 ?

  • hezhizheng hezhizheng.com 1
    6个月前

    毫无快的感觉

  • Stone007
    5个月前

    之前用过啊,但是每次修改代码都要清除缓存很麻烦。所以开发时千万别开。。

  • 依剑听雨 1
    5个月前

    讲道理来说,如果每次访问都需要把框架加载到内存,而不是常驻内存的话,这个访问速度并不会快多少

  • 依剑听雨
    5个月前

    @hezhizheng 常驻内存是有绝对的优势,我们目前有node 版本 和 php 版本,node 接口的执行速度比php 快了3-5倍~
    https://github.com/notadd/notaddhttps://github.com/notadd/notadd/tree/next

    swoole 常驻内存优势也很大

  • dope2008
    1个月前

    There are no commands defined in the "opcache" namespace.

    Did you mean this?
    cache

    出这个错,是什么意思?

暂无评论~~
您需要登陆以后才能留下评论!

Composer 中国全量镜像

Top 100 扩展包

Lumen 中文文档

Laravel 速查表

Laravel 中文文档

Laravel 项目开发规范

Laravel 开发环境部署

Elasticsearch-PHP 中文文档

Lumen 中文文档

GraphQL PHP 中文文档

社区文档撰写指南

TDD 构建 Laravel 论坛笔记

PHP PSR 标准规范

PHP 设计模式全集

Dingo API 中文文档