文章利用图文详细的介绍了在php中关于include与include_once和require与require_once性能图,有需要的朋友可以详细的看看,但总体来讲include_once和require_once性能要好很多,特别是在多次调用时。

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

测试方法

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

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();

测试结果

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

php-include.png

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

2,使用include_once()函数加载文件的执行时间

php-include_once.png

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

3,使用require函数加载文件的执行时间

php-require.png

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

4,使用require_once()函数加载文件的执行时间

php-require_once.png

解:使用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 之前,包含文件中的语法错误不会导致程序停止,但从此版本之后会。

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

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

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