在写程序的时候,经常会为是改用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();
?>

检测你的php代码执行效率的更多相关文章

  1. 用 console.time()和 console.timeEnd() 测试你的 javascript 代码执行效率

    无意中学习到了一种测试 javascript 代码执行效率的一种方法,就记下来便于以后使用,用到了console对象中的  time  和  timeEnd  方法 . console.time('m ...

  2. .Net中Task使用来提高代码执行效率

    技术不断更新迭代,更高效的执行效率越来越被重视,所以对Task的使用进行了简单使用做了整理与大家分享. .Net 中有了Task后使多线程编程更简单使用和操作,下面粘上代码进行简单说明: /// &l ...

  3. .NET代码执行效率优化

    NET性能优化方面的总结 从2004年底开始接触C#到现在也有2年多的时间了,因为有C++方面的基础,对于C#,我习惯于与C++对比.现在总结一些.NET方面的性能优化方面的经验,算是对这两年多的.N ...

  4. 使用CompletableFuture优化你的代码执行效率

    这篇文章详细讲解java8中CompletableFuture的特性,方法以及实例. 在java8以前,我们使用java的多线程编程,一般是通过Runnable中的run方法来完成,这种方式,有个很明 ...

  5. C# 监控代码执行效率

    System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); stop ...

  6. PHP检验代码执行效率—时间统计方法

    <?php class runtime { ; ; function get_microtime() { list($usec,$sec) =explode('',microtime()); r ...

  7. 检测Python程序的执行效率

    无意中被问到代码执行效率的问题,那就总结一下检测代码执行效率的几种方式: 一.装饰器 在函数上加装饰器,来得到函数的执行时间. def cst_time(func, *args, **kwargs): ...

  8. 关于JavaScript代码的执行效率总结

    Javascript是一门非常灵活的语言,我们可以随心所欲的书写各种风格的代码,不同风格的代码也必然也会导致执行效率的差异,开发过程中零零散散地接触到许多提高代码性能的方法,整理一下平时比较常见并且容 ...

  9. Javascript执行效率总结

    Javascript是一门非常灵活的语言,我们可以随心所欲的书写各种风格的代码,不同风格的代码也必然也会导致执行效率的差异,开发过程中零零散散地接触到许多提高代码性能的方法,整理一下平时比较常见并且容 ...

随机推荐

  1. 【Visual Studio】设置Solution Explorer同步当前文档

    从Solution Explorer打开查看多个文档,在编辑文档时经常会搞不清楚当前文档在项目中的位置,希望Solution Explorer能够同步跳转到选中当前的文档的位置. 从Debug或Too ...

  2. Java面向对象编程:封装,继承,多态

    Java面向对象的三大特征: 封装:通过Java的类来实现数据和操作方法的封装,对外界可以将每一个Java类都视为一个黑箱,只需调用该黑箱提供的方法即可完成你想要的操作. 继承:通过类的继承,将统一的 ...

  3. ftp 长传报错553 可能是选的目录不对

    ftp> put /root/20180711tmp.txt /cc.txt local: /root/20180711tmp.txt remote: /cc.txt 200 PORT comm ...

  4. ubuntu 12.04 rails server 时候报错 execjs

    新的应用创建好了,使用rails server启动看看,oops!原来是没有javascript运行环境. 1 2 $ rails server  /usr/local/lib/ruby/gems/1 ...

  5. springmvc拦截器的配置、使用

    springmvc拦截器的配置.使用:1.自定义拦截器,实现HandlerInterceptor接口. package com.bybo.aca.web.interceptor; import jav ...

  6. mysql 修改用户权限,允许远程连接数据库

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'admin123' WITH GRANT OPTION; flush privileg ...

  7. android DVM

    android 运行环境主要是虚拟机技术:Dalvik.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说 ...

  8. 关于Jsp中的三种弹框

    对话框有三种 1:只是提醒,不能对脚本产生任何改变: 2:一般用于确认,返回 true 或者 false ,所以可以轻松用于 if...else...判断 3:一个带输入的对话框,可以返回用户填入的字 ...

  9. 关于Struts2有时候出现的莫名其妙的错误

    有的时候突然出现红色叉叉,但是又不知道哪里错了,解决方法: 1.刷新项目文件夹 2.重启MyEclipse

  10. C++ 继承、函数重载

    题外话1:浪费了两天,可耻! 题外话2:你这个年纪,做得好是理所当然,做不好是罪孽深重!!! --- 深以为然. 题外话3:从开始看C++ Primer 到现在,整整24天了,没想到基础方面耗费这么久 ...