php的编译和执行是分开的,先编译成二进制可执行文件,然后在次执行。

对于PHP、Python属于解释型语言,不产生机器码,而是产生中间码(中间码是不能直接执行,这个中间码只有解释器可以识别到,中间码要靠解析器来进行执行)
PHP的解析器是Zend,PHP使用Zend引擎,中间码我们也称作为操作码(opcode)

鸟哥在博客中说,提高PHP 7性能的几个tips,第一条就是开启opache,引用下原文:


APC与Opcache都是字节码缓存也就是,PHP在被编译的时候,首先会把php代码转换为字节码,字节码然后被执行。

php文件第二次执行时,同样还是会重新转换为字节码,但是很多时候,文件内容几乎是一样的,比如静态HTML文件,生成后内容许久都不会改变,用户访问请求直接由服务器读取响应给客户端浏览器。都不用经过PHP进行解析构建了。

内存中的字节码数据,可以直接缓存进行二次编译。这样程序就会快一些,cpu的消耗也少了。
(这里字节码 就是 opcode)
实测PHP7.4开启Opcache前后差距
开启前:
QQ图片20200214172012.png
开启后:
QQ截图20200214172038.png
开启opcache方法
打开php.ini文件
找到:[opcache],设置为:

[opcache]
; 开关打开
opcache.enable=1

; 设置共享内存大小, 单位为:Mb
opcache.memory_consumption=128

;如果启用,那么 OPcache 会每隔 opcache.revalidate_freq 设定的秒数 检查脚本是否更新。 如果禁用此选项,你必须使用 opcache_reset() 或者 opcache_invalidate() 函数来手动重置 OPcache,也可以 通过重启 Web 服务器来使文件系统更改生效。
opcache.validate_timestamps=60

#提示:在opcache使用软连接的情况下,会存在opcache没有被清除的情况.可以使用重启fastcgi来解决这个问题.

在php.ini最后一行添加opcache.so 主要作用是用来引用opcache

[root@abcdocker ~]# tail /etc/php.ini 
zend_extension="opcache.so"

重启使用phpinfo查看即可

Last modification:March 22nd, 2020 at 08:52 am
如果觉得我的文章对你有用,请随意赞赏