首页 > 代码库 > 用VLD检测你的php代码执行效率~~

用VLD检测你的php代码执行效率~~

在写程序的时候,经常会为是改用empty()还是isset好,或是用单引号还是双引号来显示连接字符串而发出疑问,现在好了。我们其实可以通过程序很科学的得出精确的答案。知道我们的程序到底怎样写效率会更好。

VLD全名是Vulcan Logic Disassembler,可以用来检测PHP脚本的执行情况。

1)
安装VLD:

wget http://pecl.php.net/get/vld
tar zxvf vld-0.9.1.tgz
cd vld-0.9.1
phpize
./configure
make install


编辑php.ini文件激活vld扩展:

extension=vld.so

别忘了重启Apache。

下面我们看看如何检测PHP脚本的执行情况,看看PHP是如何处理单双引号字符串的:

s.php(单引号):<?php echo ‘hello, world.‘; ?>
d.php(双引号):<?php echo "hello, world."; ?>

开始检测:

php -dvld.active=1 s.php或者d.php

结果不管是s.php还是d.php,number of ops都是3,内容也都一样:

number of ops: 3
compiled vars: none
line     # op                           fetch          ext return operands
-------------------------------------------------------------------------------
   1     0 ECHO                                                     ‘hello%2C+world.‘
   2     1 RETURN                                                   1
         2* ZEND_HANDLE_EXCEPTION


通常人们总是说,单引号比双引号快。但正如上面的实验结果显示,如果仅仅是输出一个常量字符串,那么单引号和双引号的效率其实是一样的。大家可以试试连接两个变量时他们的效率是不是还是一样呢

 

2)

<?php
/*
 *文件:PHP_OperationTime.php
 *功能:检测PHP执行效率
 *作者:感染源
 *时间:2007-04-29
*/

class timer
{
    var $StartTime = 0;
    var $StopTime = 0;
    var $TimeSpent = 0;

    function start()
    {
        $this->StartTime = microtime();
    }

    function stop()
    {
        $this->StopTime = microtime();
    }

    function spent()
    {
        if($this->TimeSpent)
            return $this->TimeSpent;
        else
        {
            $StartMicro = substr($this->StartTime,0,10);
            $StartSecond = substr($this->StartTime,11,10);
            $StopMicro = substr($this->StopTime,0,10);
            $StopSecond = substr($this->StopTime,11,10);

            $start = doubleval($StartMicro)+$StartSecond;
            $stop = doubleval($StopMicro)+$StartSecond;

            $this->TimeSpent = $stop-$start;
            return substr($this->TimeSpent,0,8).‘秒‘;
        }
    }
}//Class Timer

$ct = new timer;
$ct->start();
//include_once(‘keygen.php‘);
include_once(‘../GetRate/inputnum.php‘);
$ct->stop();
echo ‘<br>‘;
echo $ct->spent();
?>