本文移至:http://www.phpgay.com/Article/detail/classid/2/id/61.html

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的报告文件。

转载于:https://www.cnblogs.com/myblog1314/p/4439584.html

php opcode缓存相关推荐

  1. 深入理解PHP Opcode缓存原理

    什么是opcode缓存? 当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode).Opcode cache的目地是避免重复编译,减少 ...

  2. PHP OPCode缓存:APC详细介绍

    PHP OPCode缓存:APC详细介绍 前言 PHP语言在性能上相对于其他编译型语言来说性能算不上突出,但是使用了OPCode缓存后性能提升还是很明显的.常见的主要有 Eaccelerator,XC ...

  3. 前端开发中的性能那点事(三)php的opcode缓存

    2019独角兽企业重金招聘Python工程师标准>>> 前言:由php的运行机制决定,其实php在运行阶段我们也是可以进行缓存的从而提高程序运行效率,这就是我们常说的opcode缓存 ...

  4. Opcode 缓存介绍以及使用 Opcache

    介绍 Opcode 缓存 Operation code,解析 PHP 脚本分析代码,生成 Zend 引擎可以直接执行的中间码 PHP 解析流程:词法分析(Scanning) -> 语法分析(Pa ...

  5. opcode php 5.4,为PHP5.4开启Zend OPCode缓存

    为PHP5.4开启Zend OPCode缓存 编译步骤: 复制代码 代码如下: git clone git://github.com/zend-dev/ZendOptimizerPlus.git cd ...

  6. php获得opcode,php opcode 缓存

    最近在做php接口优化,其中一个优化是使用opcode缓存. 查阅资料后得知,缓存opcode可通过使用 apc.eAccelerator.XCache 三种扩展. 后来发现在我们的服务器上已经安装了 ...

  7. opcode php 缓存,PHP Opcode 缓存

    显示行号 | 选择喜欢的代码风格 默认 GitHub Dune LakeSide Plateau Vibrant Blue Eighties Tranquil PHP 本身来说是非常快的,但是但你当发 ...

  8. php 5.4 opcode,PHP Opcode缓存总结

    1.Zend Optimizer v3.x.x v2.x.x 在PHP-5.2.x以前的PHP版本使用,用优化代码的方法来提高PHP应用程序的执行速度,理论上要比不使用ZO要快40%-100%.实现的 ...

  9. opcode加密php代码,总结Opcode缓存和PHP代码的加密

    1.Zend Optimizer v3.x.x v2.x.x 在PHP-5.2.x以前的PHP版本使用,用优化代码的方法来提高PHP应用程序的执行速度,理论上要比不使用ZO要快40%-100%.实现的 ...

  10. opcode php 缓存,深入理解PHP Opcode缓存原理

    什么是opcode缓存? 当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode).Opcode cache的目地是避免重复编译,减少 ...

最新文章

  1. python模拟键盘输入字符_Python | 根据关键字符串遍历窗口 模拟键盘输入操作
  2. 人脸识别再遭弃用,美国之后这回轮到欧盟
  3. Ts + React + Mobx 实现移动端浏览器控制台
  4. centos下安装nginx
  5. Swift之深入解析如何在Swift中实现状态机
  6. 冒死揭秘安利_赵丽颖新剧开播备受争议?冒死安利
  7. 简单分析ComponentScan
  8. Nginx 架构浅析
  9. 退居二线VS在深圳发展,一个十年IT人的选择之难
  10. MongoDB数据库的迁移
  11. securecrt遇到一个致命的错误且必须关闭_淄博plc维修西门子plcs7-200致命错误7强制数据永久存储区错误...
  12. [图示]做人36字诀:四)人际互动——教你赢得朋友
  13. AppFabric配置
  14. 千呼万唤始出来的IDEA笔记插件mdNote
  15. 转:罗永浩写给俞敏洪的求职信
  16. 高数 | 【定积分、变限积分】【一元函数积分学李林880】 及 巧解例题
  17. 明源售楼系统技术解析—MVC架构
  18. 智能化API-发票查验接口篇
  19. 通过手机控制蓝牙模块的实例
  20. MOS管和三极管的工作原理对比

热门文章

  1. 有必要买吗_婴儿床有必要买吗 婴儿床有用吗
  2. PixelShuffler原理
  3. Linux学习笔记(9)
  4. Caffe傻瓜系列(10):draw_net.py绘制caffe net结构
  5. python数字图像处理(2):图像的读取、显示与保存
  6. Keras指定GPU训练模式,设置GPU的使用量
  7. python求解next数组实现KMP算法
  8. Markdown编辑器初步使用
  9. Eratosthenes筛法
  10. classcastexception异常_Java程序员必备:异常的十个关键知识点