zoukankan      html  css  js  c++  java
  • debian安装vld来查看Opcode,PHP调优。

    一: 我的环境: 

    Debian 7 (wheezy)  x64  

    PHP 5.4.4-14 (apt-get 而来)

    Apache/2.2.22 (同上,非源码编译)


    二 :安装vld. (# 代表是root下,下面不再说明. wget过来的是0.11.2的版本)

    首先我用pecl install channel://pecl.php.net/vld-0.10.1 安装了一次,最后make install的时候失败了。于是换一种

    #wget http://pecl.php.net/get/vld

    #tar zxvf vld

    #cd vld-0.11.2

    #phpize

    #./configure

    #make install

    现在去查看下/usr/lib/php5/20100525 下是否有vld.so


    三:加到php里面去

    #cd /etc/php5/mods-available               到php的模块目录去

    #touch vld.ini                                              建个叫vld.ini 的配置文件

    #echo -ne "; configuration for php VLD module ; priority=20 extension=/usr/lib/php5/20100525/vld.so " > vld.ini       这里我比较懒。直接一句就把内容写完了,里面的vld.so是之前编译完后的vld.so 文件

    #cd /etc/php5/conf.d

    #ln -s  ../mods-available/vld.ini 20-vld.ini            给vld.ini 做一个软链接

    #/etc/init.d/apache2 restart              重启下apache就行了





    四:使用vld 

    例子很简单的。新建两个php文件,输出一个用 . ,一个用 , 连起来

    1.php   

    <?php echo "Hello"." "."world!" ?>

    2.php

    <?php echo "Hello"," ","world!" ?>


    在shell里面执行

     #php -dvld.active=1 1.php

    #php -dvld.active=1 2.php

    然后可以看到

    root@debian:/home/www$ php -dvld.active=1 1.php
    Finding entry points
    Branch analysis from position: 0
    Return found
    filename:       /home/www/1.php
    function name:  (null)
    number of ops:  4
    compiled vars:  none
    line     # *  op                           fetch          ext  return  operands
    ---------------------------------------------------------------------------------
       1     0  >   CONCAT                                           ~0      'Hello', '+'
             1      CONCAT                                           ~1      ~0, 'world%21'
             2      ECHO                                                     ~1
       2     3    > RETURN                                                   1
    
    branch: #  0; line:     1-    2; sop:     0; eop:     3
    path #1: 0, 
    root@debian:/home/www$ php -dvld.active=1 2.php
    Finding entry points
    Branch analysis from position: 0
    Return found
    filename:       /home/www/2.php
    function name:  (null)
    number of ops:  4
    compiled vars:  none
    line     # *  op                           fetch          ext  return  operands
    ---------------------------------------------------------------------------------
       1     0  >   ECHO                                                     'Hello'
             1      ECHO                                                     '+'
             2      ECHO                                                     'world%21'
       2     3    > RETURN                                                   1
    
    branch: #  0; line:     1-    2; sop:     0; eop:     3
    path #1: 0, 
    Hello world!root@debian:/home/www$ 
    


    上面就包含了PHP运行时所执行的Opcode信息,输出了执行的操作的个数,所有的变量集输出(compiled vars),还有一个包含执行操作的PHP代码行号,执行操作的次数(#)以及所执行操作的名称(op)。


    我们重点关注关键项的数量,op的个数以及执行顺序。number of ops (OP数)标明了代码运行时在Opcode层级执行的操作总个数。在上面两个文件都是4次。

    可以看到 1.php 执行用  "."  连接的时候,用了两个CONCAT(连接调用)和一个ECHO调用。

    2.php 执行用 "," 连接的时候,没有用CONCAT操作,只有比CONCAT调用成本更低的ECHO调用。 

    所以这里我们可以得出一个简单的结论,就是用 "," 连接比用  "." 连接要快。

    实际在编写PHP代码的时候,我们需要考虑是empty快还是isset好,是,快还是 .好,我们可以通过VLD来看看OP数是多少,具体都执行了什么操作,这样就可以得到正确的合适的选择了。





  • 相关阅读:
    PM对功能模块的说明
    第四个迭代目标
    第三个迭代任务
    第三个迭代目标
    记账本状态图
    记账本数据流图
    记账本ER图
    记账本用例图
    第二个迭代目标
    记账本时序图
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3206274.html
Copyright © 2011-2022 走看看