猿问

OPcache开启后,include/require请求一个文件时,是先到缓存中查询该文件是否已经编译过?

这个名字没人起
浏览 1269回答 1
1回答

老糊涂仙

就算没有启用opcache,操作系统也会把热点文件缓存在内存中(buffers/cache),Linux上执行free可见buffers/cache占用的内容.Windows资源监视器内存标签下的"备用"内存就相当于Linux的磁盘缓存buffers/cache.opcache的好处在于省去了PHP源代码到opcode中间码的转换过程,并且保证脚本对应的opcode都保存在内容中.而C开发的PHP框架Yaf在编译时就已经被GCC优化生成机器码,在PHP服务(PHP-FPM/Apache MOD PHP)启动时就被加载到内存,opcode的性能跟机器码的性能差距很大,就算是Java中编译时优化过的bytecode,跟JIT运行时编译生成的机器码相比,差距也很大,而PHP的opcode在运行时生成,为了快速一般都不做什么优化,所以opcode跟机器码性能差距应该比Java的bytecode还要大.
随时随地看视频慕课网APP
我要回答