查看: 72|回复: 0

扣丁学堂PHP培训浅谈PHP中opcode缓存简单用法

发表于 2018-6-4 11:31:30

今天小编主要是想给大家分享一下PHP中opcode缓存简单用法,本篇文章扣丁学堂PHP在线学习小编结合实例形式分析opcode的概念、原理、简单开启与使用方法,对php开发感兴趣的小伙伴们可以了解一下。本文会列出代码,小伙伴可以好好阅读。


1、什么是opcode
解释器分析代码之后,生成可以直接运行的中间代码,就称做操作码,opcode
2、解释器与编译器的区别
解释器是生成了中间代码后直接运行中间代码,运行时的控制权还是在解释器手里。
编译器则是生成了中间代码之后还进一步优化代码,生成可以直接运行的目标程序,但不执行,等待用户触发执行,他的控制权在目标程序,和编译器无关。
3、php是解释型语言,他的原理与编译有点相似,包括词法分析,语法分析,语义分析.....,php解释器的核心引擎就是zend engine
4、php如何查看一段代码的opcode
安装php的parsekit扩展,通过扩展的api就可以查看php的opcode,如parsekit_compile_string()
php -r "var_dump(parsekit_compile_string('print 1+1;'));"
5、opcode有生成
首先要经过词法分析,脚本代码可以看做是一系列单词组合,解释器要对这些单词进行分类,并打上记号
比如print,我们查看php源码包中的zend/zend_language_scanner.l在这个文件中我们就可以查找到pirnt对应的标记。T_PRINT
找到标记之后接下来就是语法分析,在zend/zend_language_parser.y中,我们可以找到T_PRINT对应的函数
接着在zend/zend_compile.c中找到这个函数实现代码,这个函数就是实现 了opcode的转换。所有的opcode都是用户整数来表示 的。
6、 开启opcode缓存
生成opcode是需要系统开销的,每一次执行都要生成一次opcode,这样的开销还是可观的,所以php的优化必须开启opcode的缓存,来避免重复的编译。
php的opcode缓存有APC,eAccelerator,XCache,这些都是把opcode放在共享内存中。
以APC为例:在php.ini中设置
apc.cache_by_default = on
通过
<?php print_r(apc_cache_info());?>
可以查看缓存的情况,
7、opcode缓存过期
opcode缓存是会过期的,如果过期就要得新生成一次,当然也可以跳过过期检查的机制,在php.ini中设置
apc.stat=off
这样程序代码的修改得通过重启服务器来生效。
8.脚本的跟踪与分析,可以使用xdebug来跟踪,用xdebug可以实现性能跟踪器,找到程序的执行瓶颈,从而优化程序。
xdebug.profiler_output_dir = /tmp/xdebug
xdebug.profiler_output_name = cachegrind.out.%p
xdebug的函数跟踪:
xdebug.trace_output_dir = /tmp/xdebug
xdebug.trace_output_name = trace.%c
window下可以用wincachegrind查看xdebug的报告文件。
以上就是小编给大家分享的PHP中opcode缓存简单用法,希望对小伙伴们有所帮助,想要了解更多内容的小伙伴可以登录扣丁学堂官网查看更多内容。扣丁学堂是专业的PHP培训机构,不仅有专业的老师和与时俱进的课程体系,还有大量的PHP在线视频供学员观看学习哦。



文章转载自:扣丁学堂http://www.codingke.com/


回复

使用道具 举报