PHP开发 加入小组

298个成员 3006个话题 创建时间:2011-05-30

PHP OPCODE AND AUTOLOAD

发表于 2011-11-05 3618 次查看

php运行过程大致分为四步骤(确切说应该是PHP语言引擎ZEND):

 Ⅰ. Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens)

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

 Ⅲ. Compilation, 将表达式编译成Opcodes

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

 

我们的目的:缓存opcode

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

  优点:1.提升了速度 一般是2-5倍,流量大效果更明显

         2. PHP脚本在编译的状态下,对服务器的开销几乎完全消除 (节省了CPU资源)

         3.提高了性能php脚本的缓存性能 

  缺点:1.消耗你一点点内存

             2.代码不要频繁的更新(因为更新代码opcode要重新生成)

             3.生成的第一次比正常没有加加速器的时候慢(存在编译过程)

 以下是原理图:

常见的几种加速:XCACHE(LIGHTHTTPD作者),APC,ZEND PLATFORM(商业),eAccelerator(落后的)

 

以下是对比报告:

http://itst.net/654-php-on-fire-three-opcode-caches-compared

 

 

opcode拿我们常见的APC来说 (facebook采用的) 据说PHP5.4以后都会内置OPCODE

1.当你require或者include 一个文件,首先检查这个opcodeCache 也就是检查是否在RAM内存里面是否有这个相应的opcode,如果有返回opcode直接执行,如果没有编译成opcode再执行

这里存在一个重要方面,require 文件的时候需要走整个路径 如果你直接写绝对路径 不用遍历,方便快速查找

 

autoload是这样的:

获取一个类的名称,然后转成相应的名称一样的文件,然后就是include /require 这个文件

apc缓存和autoload  是本身存在冲突的 因为 一个是在编译前 一个是在编译后

如果你本身就用了 autoload 建议不太必要用apc了 

 

 

5回复
  • 2楼 kent 2011-11-05

    这玩意,在杭州某大站上过后,web服务器的负载从1.5掉到0.2~0.3上了。性能提高非常大。值得推荐。

  • 3楼 陈一七 2011-11-05

    据说facebook 已经 不用php了……

  • 4楼 kent 2011-11-05
    @陈一七:据说facebook 已经 不用php了……

    用什么语言倒不是关键,关键是,人才和思想。 学门语言很快的。

  • 5楼 小青 2011-11-07
    @陈一七:据说facebook 已经 不用php了……

    facebook在PHP上下足了苦功夫,不用php不现实吧,而且他现在所有的页面基本都是php写的。

  • 6楼 陈一七 2011-11-07

    http://coolshell.cn/articles/4549.html

发表回复
功能维护升级中,维护完成完后将再次开放,非常抱歉给您学习造成的不便。