怎么在PHP中利用操作码进行缓存

  介绍

怎么在PHP中利用操作码进行缓存?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1。什么是操作码

解释器分析代码之后,生成可以直接运行的中间代码,就称做操作码,操作码

2。解释器与编译器的区别

解释器是生成了中间代码后直接运行中间代码,运行时的控制权还是在解释器手里。

编译器则是生成了中间代码之后还进一步优化代码,生成可以直接运行的目标程序,但不执行,等待用户触发执行,他的控制权在目标程序,和编译器无关。

3. php是解释型语言,他的原理与编译有点相似,包括词法分析,语法分析,语义分析.....,php解释器的核心引擎就是zend php引擎

4.如何查看一段代码的操作码

安装php的parsekit扩展,通过扩展的api就可以查看php的操作码,如<代码> parsekit_compile_string()

php  -r “var_dump (parsekit_compile_string (& # 39; print  1 + 1 & # 39;));“

5.操作码有生成

首先要经过词法分析,脚本代码可以看做是一系列单词组合,解释器要对这些单词进行分类,并打上记号

比如打印,我们查看php源码包中的zend/zend_language_scanner.l在这个文件中我们就可以查找到pirnt对应的标记.T_PRINT

找到标记之后接下来就是语法分析,在zend/zend_language_parser.y中,我们可以找到T_PRINT对应的函数

接着在zend/zend_compile。c中找到这个函数实现代码,这个函数就是实现了操作码的转换。所有的操作码都是用户整数来表示的。

6,开启操作码缓存

生成操作码是需要系统开销的,每一次执行都要生成一次操作码,这样的开销还是可观的,所以php的优化必须开启操作码的缓存,来避免重复的编译。

php的操作码缓存有APC, eAccelerator, XCache,这些都是把操作码放在共享内存中。

以APC为例:在php。ini中设置

apc.cache_by_default =,

上通过

& lt; ? php  print_r (apc_cache_info()); ?在

可以查看缓存的情况,

7.操作码缓存过期

操作码缓存是会过期的,如果过期就要得新生成一次,当然也可以跳过过期检查的机制,在php。ini中设置

apc.stat=了

这样程序代码的修改得通过重启服务器来生效。

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 跟踪。以前% c

窗口下可以用wincachegrind查看xdebug的报告文件。

看完上述内容,你们掌握怎么在PHP中利用操作码进行缓存的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

怎么在PHP中利用操作码进行缓存