一、什么是opcode缓存
- 当一个 PHP 文件被解释执行的时候,首先是被编译成名为 opcode (CPU 专用的机器语言指令)的中间代码,然后才被底层的虚拟机执行。 如果PHP文件没有被修改过,opcode 始终是一样的。这就意味着编译步骤白白浪费了 CPU 的资源。
- 此时 opcode 缓存就派上用场了。通过将 opcode 缓存在内存中,它能防止冗余的编译步骤,并且在下次调用执行时得到重用。一般执行过程是先检查文件的签名(signature)或者修改时间,以防文件有改动。
- Opcode cache的目地是避免重复编译,减少CPU和内存开销。
- opcode 缓存通常都能够大幅度地提升应用程序的执行速度。PHP 5.5 以后的所有版本都内置了一个 opcode 缓存工具,叫做 Zend OPcache。 根据你所使用的 PHP 安装包/发行版的不同,一般情况下是默认开启的,请查看 opcache.enable phpinfo() 和 phpinfo() 输出的信息确认是否已经开启。早期的版本也能通过 PECL 扩展来安装。
二、有哪些opcode缓存插件?
- Optimizer+(Optimizer+于2013年3月中旬改名为Opcache,PHP 5.5集成Opcache,其他的会不会消失?)、eAccelerator、xcache、APC …
三、为什么使用opcode缓存?
- 主要是为了减少重复编译,从而减少CPU和内存的开销。
- 参考链接:https://www.cnblogs.com/JohnA...
四、opcache插件安装
五、划重点
- opcode缓存主要是为了减小CPU内存的开销,下次面试的时候关于性能提升的点,记得说opcache~
-
使用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模式)。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。