php的编译和执行是分开的,先编译成二进制可执行文件,然后在次执行。
对于PHP、Python属于解释型语言,不产生机器码,而是产生中间码(中间码是不能直接执行,这个中间码只有解释器可以识别到,中间码要靠解析器来进行执行)
PHP的解析器是Zend,PHP使用Zend引擎,中间码我们也称作为操作码(opcode)
鸟哥在博客中说,提高PHP 7性能的几个tips,第一条就是开启opache,引用下原文:
记得启用Zend Opcache, 因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快
APC与Opcache都是字节码缓存也就是,PHP在被编译的时候,首先会把php代码转换为字节码,字节码然后被执行。
php文件第二次执行时,同样还是会重新转换为字节码,但是很多时候,文件内容几乎是一样的,比如静态HTML文件,生成后内容许久都不会改变,用户访问请求直接由服务器读取响应给客户端浏览器。都不用经过PHP进行解析构建了。
内存中的字节码数据,可以直接缓存进行二次编译。这样程序就会快一些,cpu的消耗也少了。
(这里字节码 就是 opcode)
实测PHP7.4开启Opcache前后差距
开启前:
开启后:
开启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查看即可
版权属于:尹深
本文链接:https://cloud.tencent.com/developer/article/1795084
转载时须注明出处及本声明
(本站部分资源来自互联网收集整理!如有侵权请联系站长删除!!!)