本文实例讲述了PHP中opcode缓存简单用法。分享给大家供大家参考,具体如下:
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
通过
<"htmlcode">apc.stat=off这样程序代码的修改得通过重启服务器来生效。
8.脚本的跟踪与分析,可以使用xdebug来跟踪,用xdebug可以实现性能跟踪器,找到程序的执行瓶颈,从而优化程序。
xdebug.profiler_output_dir = /tmp/xdebug xdebug.profiler_output_name = cachegrind.out.%pxdebug的函数跟踪:
xdebug.trace_output_dir = /tmp/xdebug xdebug.trace_output_name = trace.%cwindow下可以用wincachegrind查看xdebug的报告文件。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php缓存技术总结》、《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
PHP,opcode缓存
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。