php opcache作用,opcache在php中的运用

众所周知php是一种解释型语言,它的执行可分为如下几个流程:Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens)

Parsing, 将Tokens转换成简单而有意义的表达式

Compilation, 将表达式编译成Opocdes

Execution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。

这样一来的话,对于同一个文件,反复请求,就要不断解析、编译和执行PHP脚本,消耗过多资源。

php传统运行方式:

95d3bf64faa2add3fd2f12bdc8fcbc2e-0.png

为了解决这个问题,opcode缓存技术应运而生。

那么什么是 opcode 缓存?

当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。Opcode 缓存就是将编译好的Opcode码缓存在内存中,下次再执行这个脚本时,直接会去找到缓存下的opcode码,直接执行最后一步,而不再需要中间的步骤了,其目地是避免重复编译,减少 CPU 和内存开销。

当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。Opcode 缓存就是将编译好的Opcode码缓存在内存中,下次再执行这个脚本时,直接会去找到缓存下的opcode码,直接执行最后一步,而不再需要中间的步骤了,其目地是避免重复编译,减少 CPU 和内存开销。

缓存运行方式:

95d3bf64faa2add3fd2f12bdc8fcbc2e-1.png

opcache就是一种opcode缓存工具。

Opcache其他的缓存工具最大的不同,也可以说是优势,就是它已经进入php源码树,成为官方产品,会一直跟着php更新,而其他的已经很久不更新了,目前对于新版的php都不支持或者兼容性很差。其次,经过测试,opcache的效率也比其他工具高。

那么如何开启使用opcache呢?

既然opcahce已经进入php源码树,那么作为内置的工具,开启方式肯定很简单了,下面便是推荐配置:zend_extension=.././...php_opcache.dll(路径)

opcache.memory_consumption=128

#共享内存opcache.interned_strings_buffer=8

#存储临时字符串opcache.max_accelerated_files=4000

#缓存文件数opcache.revalidate_freq=60

#缓存时间opcache.fast_shutdown=1opcache.enable_cli=1 opcache.enable=1

#是否开启opcode缓存

你只需要将前面的;去掉就可以了。

当然opcache有很多配置,这里就不一一列举,上面这几条是标配,可以满足一般需求。

理论上讲,php文件越大,逻辑越复杂,那么opcache的效果就越明显,而且在速度和抗并发上有非常大的作用。

在本地环境测试结果如下(电脑性能有限):

95d3bf64faa2add3fd2f12bdc8fcbc2e-2.png

服务器测试:

95d3bf64faa2add3fd2f12bdc8fcbc2e-3.png

9cdd4d2eb81c676e0e0c329559ad76cc-4.png

有明显的效率提升。

需要注意到是,opcache既然会缓存住文件第一次执行的opcode,那么在测试环境就不要开了,原因你懂得,开发时代码改来改去,结果却不变………..

要手动清除opcache缓存,需要运行opcache_reset()来清除,所以线上如果配置了opcache,需要清除的话可以用这个函数。

转自: http://qqfe.org/archives/240?utm_source=tuicool&utm_medium=referral

众所周知php是一种解释型语言,它的执行可分为如下几个流程:Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens)

Parsing, 将Tokens转换成简单而有意义的表达式

Compilation, 将表达式编译成Opocdes

Execution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。

这样一来的话,对于同一个文件,反复请求,就要不断解析、编译和执行PHP脚本,消耗过多资源。

php传统运行方式:

95d3bf64faa2add3fd2f12bdc8fcbc2e-0.png

为了解决这个问题,opcode缓存技术应运而生。

那么什么是 opcode 缓存?

当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。Opcode 缓存就是将编译好的Opcode码缓存在内存中,下次再执行这个脚本时,直接会去找到缓存下的opcode码,直接执行最后一步,而不再需要中间的步骤了,其目地是避免重复编译,减少 CPU 和内存开销。

当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。Opcode 缓存就是将编译好的Opcode码缓存在内存中,下次再执行这个脚本时,直接会去找到缓存下的opcode码,直接执行最后一步,而不再需要中间的步骤了,其目地是避免重复编译,减少 CPU 和内存开销。

缓存运行方式:

95d3bf64faa2add3fd2f12bdc8fcbc2e-1.png

opcache就是一种opcode缓存工具。

Opcache其他的缓存工具最大的不同,也可以说是优势,就是它已经进入php源码树,成为官方产品,会一直跟着php更新,而其他的已经很久不更新了,目前对于新版的php都不支持或者兼容性很差。其次,经过测试,opcache的效率也比其他工具高。

那么如何开启使用opcache呢?

既然opcahce已经进入php源码树,那么作为内置的工具,开启方式肯定很简单了,下面便是推荐配置:zend_extension=.././...php_opcache.dll(路径)

opcache.memory_consumption=128

#共享内存opcache.interned_strings_buffer=8

#存储临时字符串opcache.max_accelerated_files=4000

#缓存文件数opcache.revalidate_freq=60

#缓存时间opcache.fast_shutdown=1opcache.enable_cli=1 opcache.enable=1

#是否开启opcode缓存

你只需要将前面的;去掉就可以了。

当然opcache有很多配置,这里就不一一列举,上面这几条是标配,可以满足一般需求。

理论上讲,php文件越大,逻辑越复杂,那么opcache的效果就越明显,而且在速度和抗并发上有非常大的作用。

在本地环境测试结果如下(电脑性能有限):

95d3bf64faa2add3fd2f12bdc8fcbc2e-2.png

服务器测试:

95d3bf64faa2add3fd2f12bdc8fcbc2e-3.png

9cdd4d2eb81c676e0e0c329559ad76cc-4.png

有明显的效率提升。

需要注意到是,opcache既然会缓存住文件第一次执行的opcode,那么在测试环境就不要开了,原因你懂得,开发时代码改来改去,结果却不变………..

要手动清除opcache缓存,需要运行opcache_reset()来清除,所以线上如果配置了opcache,需要清除的话可以用这个函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值