一、什么是opcode缓存

  1. 当一个 PHP 文件被解释执行的时候,首先是被编译成名为 opcode (CPU 专用的机器语言指令)的中间代码,然后才被底层的虚拟机执行。 如果PHP文件没有被修改过,opcode 始终是一样的。这就意味着编译步骤白白浪费了 CPU 的资源。
  2. 此时 opcode 缓存就派上用场了。通过将 opcode 缓存在内存中,它能防止冗余的编译步骤,并且在下次调用执行时得到重用。一般执行过程是先检查文件的签名(signature)或者修改时间,以防文件有改动。
  3. Opcode cache的目地是避免重复编译,减少CPU和内存开销。
  4. opcode 缓存通常都能够大幅度地提升应用程序的执行速度。PHP 5.5 以后的所有版本都内置了一个 opcode 缓存工具,叫做 Zend OPcache。 根据你所使用的 PHP 安装包/发行版的不同,一般情况下是默认开启的,请查看 opcache.enable phpinfo() 和 phpinfo() 输出的信息确认是否已经开启。早期的版本也能通过 PECL 扩展来安装。

二、有哪些opcode缓存插件?

  1. Optimizer+(Optimizer+于2013年3月中旬改名为Opcache,PHP 5.5集成Opcache,其他的会不会消失?)、eAccelerator、xcache、APC …

三、为什么使用opcode缓存?

  1. 主要是为了减少重复编译,从而减少CPU和内存的开销。
  2. 参考链接:https://www.cnblogs.com/JohnA...

四、opcache插件安装

  1. 请参考:https://blog.jjonline.cn/linu...

五、划重点

  1. opcode缓存主要是为了减小CPU内存的开销,下次面试的时候关于性能提升的点,记得说opcache~
  2. 使用opcache有一个缺点,就是更新了php代码后可能不会马上生效,因为opcache有个有效时间的设置,只有过期后才会重新生成opcode否则还会沿用原来的缓存的opcode,这里,提供三种思路解决这种问题:

    (1)根据业务实际情况,合理设置opcache的过期时间,也就是opcache.revalidate_freq值
    (2)自己写一个php脚本,调用opcache_reset()函数重置所有opcache缓存字节码,或者使用opcache_invalidate(PHPfileDir,true)重置指定php文件的缓存字节码。
    (3)最简单粗暴的方法,可立即生效的方式,就是直接重启php-fpm(nginx fast-cgi模式)或apache(apache-handler模式)。

繁星落眼眶
626 声望54 粉丝