函数施行时间相比,require_once品质比较详解

作者: 关于计算机  发布:2019-09-26

,测试环境
操作系统:Window XP
PHP版本:PHP Version 5.2.11
Apache版本:Apache 2.0 Handler

PHP性能优化第八期函数篇,include()与include_once()和require()与require_once()性能比较,主要是通过获取这四个函数执行时间 比较性能差异,实验采用Benchmark_Iterate类工具。

二,测试方法
使用Benchmark_Iterate测试isset()和empty在变量存在和不存在的情况下执行50次并生成图表

测试方法
加载一个已经存在的文件exist.php,通过Benchmark_Iterate类调用50次,获取各函数的执行时间并生成曲线图。

三,isset()与empty()判断变量不存在的情况
1,测试代码

测试代码

 代码如下

 代码如下

require_once "Benchmark/Iterate.php";
$bench = new Benchmark_Iterate;
function check1($var){
    isset($var);
}
function check2($var){
    !empty($var);
}
$bench->run(50,"check1",$var);
//$bench->run(50,"check2",$var);
$result = $bench->get();

require_once "Benchmark/Iterate.php";
$bench = new Benchmark_Iterate;
function load_include(){
    include 'exist.php';
}
function load_require(){
    require 'exist.php';
}
function load_include_once(){
    include_once 'exist.php';
}
function load_require_once(){
    require_once 'exist.php';
}
$bench->run(50,"load_include");
//$bench->run(50,"load_require");
//$bench->run(50,"load_include_once");
//$bench->run(50,"load_require_once");
$result = $bench->get();

其中$var变量并没有初始化,判断变量不存在的情况,两个函数的执行性能如下图

测试结果
1,使用include()函数加载文件的执行时间

2,isset()判断变量不存在的情况

图片 1
图解:使 用include()函数加载文件的平均执行时间为0.0013秒左右

图片 2

2,使用include_once()函数加载文件的执行时间
图片 3
图解:使用include_once()函数加载文件的平均执行时间为0.0011-0.0012秒

图解:isset()判断变量不存在的情况平均执行时间在0.0010-0.0011秒之间
3,empty()判断变量不存在的情况

3,使用require函数加载文件的执行时间
图片 4
图解:使用require()函数加载文件的平均执行时间为0.0012-0.0013秒

图片 5
图解:empty()判断变量不存在的情况平均执行时间在0.0010-0.0011秒之间
四,isset()与empty()判断变量存在的情况

4,使用require_once()函数加载文件的执行 时间
图片 6
解:使用require_once()函数加载文件的平均执行时间为0.0011-0.0012秒

,测试代码

由上面测试结果 可知,四个函数加载文件的执行时间基本上差不多,区别在于,如果存在一个文件多次加载的情况,include和require函数会加载多次,而 include_once和require_once函数只会加载一次。同时处理加载失败的情况不同,include() 和include_once() 产生一个警告而 require() 和 require_once() 则导致一个致命错误。

 代码如下

相关说明
include()和require()函数
这两种结构除了在如何处理失败之外完全一样。include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果想在遇到丢失文件时停止处理页面就用 require()。include() 就不是这样,脚本会继续运行。同时也要确认设置了合适的 include_path。注意在 PHP 4.3.5 之前,包含文件中的语法错误不会导致程序停止,但从此版本之后会。

require_once "Benchmark/Iterate.php";
$bench = new Benchmark_Iterate;
 
function check1($var){
    isset($var);
}
function check2($var){
    !empty($var);
}
$var = true;
$bench->run(50,"check1",$var);
//$bench->run(50,"check2",$var);
$result = $bench->get();

寻找包含文件的顺序先是在当前工作目录的相对的 include_path 下寻找,然后是当前运行脚本所在目录相对的 include_path 下寻找。例如 include_path 是 .,当前工作目录是 /www/,脚本中要 include 一个 include/a.php 并且在该文件中有一句 include "b.php",则寻找 b.php 的顺序先是 /www/,然后是 /www/include/。如果文件名以 ./ 或者 ../ 开始,则只在当前工作目录相对的 include_path 下寻找。

初始化$var变量为true,判断变量存在的情况,两个函数的执行性能如下

当一个文件被包含时,其中所包含的代码继承了 include 所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。不过所有在包含文件中定义的函数和类都具有全局作用域。

2,isset()判断变量存在的情况

include_once() 和require_once()函数
include_once() 和require_once()语句在脚本执行期间包含并运行指定文件。此行为和 include() 和require() 语句类似,唯一区别是如果该文件中的代码已经被包含了,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。 include_once() 和require_once()应该用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

图片 7图解:isset()判断变量存在的情况平均执行时间在0.0010-0.0011秒之间

3,empty()判断变量存在的情况

图片 8图解:isset()判断变量存在的情况平均执行时间在0.0010-0.0011秒之间

综合上面的测试性能情况,可知isset()和empty()函数的执行时间基本一样,两个函数的平均执行时间在0.0010-0.0011秒之间,当然这与具体的环境有关,从当前测试环境来看,两个函数的性能是一样的。

 

本文由金沙澳门官网送注册58发布于关于计算机,转载请注明出处:函数施行时间相比,require_once品质比较详解

关键词: