PHP性能加速: OPcache

虽然是老生常谈,还是想在此记录一下。
之前在开发环境的服务器上也遇到过此问题,为何明明在服务器上已经修改了代码,但就是不生效!?
有可能就是因为开启了OPcache,线上环境为了加速PHP性能(线上开启此扩展是很有必要的),开启了此配置,然而在开发环境上代码时常发生修改,需要注意这个配置(开发环境甚至可以关闭),以避免发生上述问题。

什么是OPcache

OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能,存储预编译字节码的好处就是: 省去了每次加载和解析 PHP 脚本的开销。

PHP 5.5.0 及后续版本中已经绑定了 OPcache 扩展。 对于 PHP 5.2,5.3 和 5.4 版本可以使用 » PECL 扩展中的 OPcache 库。

怎么安装OPcache

PHP 5.5.0 及后续版本

OPcache 只能编译为共享扩展。 如果你使用 --disable-all 参数 禁用了默认扩展的构建, 那么必须使用 --enable-opcache 选项来开启 OPcache。

编译之后,就可以使用 zend_extension 指令来将 OPcache 扩展加载到 PHP 中。在非 Windows 平台使用 zend_extension=/full/path/to/opcache.so, Windows 平台使用 zend_extension=C:\path\to\php_opcache.dll。

PHP 5.2, 5.3 和 5.4 版本

此 » PECL 扩展未与 PHP 捆绑。

安装此 PECL 扩展相关的信息可在手册中标题为 PECL 扩展的安装章节中找到。更多信息如新的发行版本、下载、源文件、 维护人员信息及变更日志等,都在此处: » http://pecl.php.net/package/ZendOpcache.

PECL 扩展的 DLL 当前不可用。

php.ini推荐配置

开发环境:
opcache.validate_timestamps = 1; // 检查php脚本有发生变化 0:不检查, 1:检查
opcache.revalidate_freq = 0;

生产环境:
opcache.validate_timestamps = 0; // 检查php脚本有发生变化 0:不检查, 1:检查 (设置0之后,每次执行代码不检查脚本更新,所以当我们修改 PHP 代码时需要手动清除OPcache: opcache_reset() )
opcache.revalidate_freq = 0;     // 由于 validate_timestamps = 0 这个参数就不会被看了,可随意填写。

关键词:
* 操作码缓存
* 预编译的字节码
* opcode

已有 9 条评论
  1. 小轲

    即将新年啦~ 来拜个早年。

    小轲 February 9th, 2018 at 01:24 pm回复
  2. 钟水洲博客

    拜个早年

    钟水洲博客 February 8th, 2018 at 05:33 pm回复
  3. 保罗

    执行一些比较大的程序就比较实用吧?另外下面那两个广告机为啥不清掉2333

    保罗 January 16th, 2018 at 02:58 pm回复
    1. LukaChen

      前段时间回老家了,最近有空得好好写点东西了,完全没有产出嘛。哈哈哈:)

      LukaChen January 29th, 2018 at 03:31 pm回复
  4. tanker

    拜访大佬

    tanker December 26th, 2017 at 07:42 pm回复
    1. LukaChen

      你好,欢迎~

      LukaChen December 27th, 2017 at 02:39 pm回复
  5. Flyer

    呃,网址写错了

    Flyer November 2nd, 2017 at 06:17 am回复
    1. LukaChen

      @Flyer:0U0

      LukaChen November 3rd, 2017 at 10:40 am回复
  6. Flyer

    这个可以有

    Flyer November 2nd, 2017 at 06:16 am回复
发表新评论