php中 inlcude()性能对比详解

include性能

 代码如下 复制代码

include('include.php');

当然这种方式并没有错误,只不过在效率上它比下面的方式要稍稍差些:

 代码如下 复制代码

include(realpath(dirname(_FILE_)).DIRECTORY_SEPARATOR.'include.php');

这种方式我们可能需要输入更多一些,但相对于前面那种需要PHP引擎去include_path 中迭代查找所有名称为'include.php’才能查找到相应对象来说,dirname(__FILE__)这种绝对路径的指定会让系统迅速定位到相应文件。

在PHP中常量__FILE__ 其实跟C#中的AppDomain.CurrentDomain.BaseDirectory非常类似,它返回的是当前代码正在执行的代码所在文件的绝对路径。而函数dirname()则返回其父文件夹路径。

另外一个更查找效率高,并且书写简单的方式是include('./include.php'),这相当于告诉系统查找当前路径下的'include.php’文件。

在大型系统中我们常常使用另外一个更好的方式,我们常常在路由文件或其他初始化文件中加入如下代码:

 代码如下 复制代码

define('APP_PATH',realpath(dirname(_FILE_)));

这相当于给系统添加了一个全局变量来指出系统根目录,当我们后面需要引用某具体路径下的文件时我们就可以使用如下代码了:

 代码如下 复制代码

include(APP_PATH.DIRECTORY_SEPARATOR.'models'.'User.php');

autoload与include性能比较

例如有以下四个脚本:

 代码如下 复制代码
#file:include1.php
include 'include2.php';
//@todo something#file:include2.php
//@todo something#file:script1.php
include 'include2.php';
//@todo something
#file:script2.php
include 'include1.php';
include 'script1.php'
//@todo something

当执行script1.php时, include ‘include2.php’; 这行代码被执行了一次。而执行script2.php时,这行代码被执行了两次。
这里只是一个简单的例子,在实际的项目中,include2.php被include的次数可能更多。这样反复的include,是否会影响性能呢?为此我写了个脚本来测试。

 代码如下 复制代码

#file:SimpleClass.php
class SimpleClass {
        public function __construct() {
                echo get_time() . "rn";
        }
}

#file:php_include.php
for($i  = 0;$i < $loop;$i++) {
        include_once "SimpleClass.php";
        new SimpleClass();
}

当$loop值为1时,脚本耗时约0.00018906593322754秒,当$loop为1000时,脚本耗时约0.076701879501343秒。
如果我们用autoload实现呢?

 代码如下 复制代码

#file:php_autoload.php
function __autoload($class_name) {
        include_once $class_name . '.php';
}for($i  = 0;$i < $loop;$i++) {
        new SimpleClass();
}

在这段代码中,我定义了__autoload函数,几乎一样的脚本,当$loop为1时,耗时0.0002131462097168秒,而当$loop为1000时,耗时仅为前面代码的1/7,0.012391805648804秒。
但请注意看SimpleClass的代码,其中输出了一行字符串,如果去掉这行输出后再比较,会是什么样的结果呢?
在$loop同为1000的情况下,前者耗时0.057836055755615秒,而使用了autoload后,仅仅0.00199294090271秒!效率相差近30倍!
从上面的测试可以看出,当文件仅仅被include一次,autoload会消耗稍微多一点的时间,但如果在文件被反复include的情况下,使用autoload则能大大提高系统性能。
至于是否要使用autoload来解放程序员,这就仁者见仁,智者见智了。在我看来,条件允许的前提下,牺牲这一点性能(某些情况下,甚至可能是提升性能)更为便捷的开发,是值得的。

include()和require()性能

对include()来说,在 include()执行时文件每次都要进行读取和评估;

而对于require()来说,文件只处理一次(实际上,文件内容替换了require()语句)。

这就意味着如果有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高。

另一方面,如果每次执行代码时相读取不同的文件,或者有通过一组文件叠代的循环,就使用include(),

因为可以给想要包括的文件名设置一个变量,当参数为include()时使用这个变量。

时间: 2024-10-31 12:07:24

php中 inlcude()性能对比详解的相关文章

php中inlcude()性能对比详解_php技巧

include性能 复制代码 代码如下: include('include.php'); 当然这种方式并没有错误,只不过在效率上它比下面的方式要稍稍差些: 复制代码 代码如下: include(realpath(dirname(_FILE_)).DIRECTORY_SEPARATOR.'include.php'); 这种方式我们可能需要输入更多一些,但相对于前面那种需要PHP引擎去include_path 中迭代查找所有名称为'include.php'才能查找到相应对象来说,dirname(__

佳能A4000 IS相机性能和尼康D5200相机性能对比详解分享

给各位摄影爱好者们来详细的解析分享一下佳能A4000 IS相机的性能和尼康D5200相机的性能对比. 对比详解: 佳能A4000 IS配备了一块3.0英寸23万像素LCD液晶显示屏,采用了工程塑料的材质,显示效果清晰细腻.机身尺寸为95.3×56.3×24.3mm,重约为130g. 而尼康D5200采用了3英寸宽视角约92.1万像素的大尺寸TFT LCD液晶显示屏,显示屏向左侧打开的角度范围为0–180°,打开时还可以向前翻转180°或向后翻转90°.   佳能A4000 IS的镜头使用的是三段

佳能IXUS155性能和佳能650D性能对比详解分享

给各位摄影爱好者们来详细的解析分享一下佳能IXUS155的性能和佳能650D的性能对比. 解析分享: 佳能IXUS155的重要核心操作部分集中在背部右侧,佳能IXUS155配备了一块2.7英寸LCD显示屏.在屏幕的右侧就是四维方向功能选择盘和快捷功能按钮,键位分布极为简洁,适合入门用户和家庭用户进行操控.而佳能650D约104万点3.0英寸可旋转液晶显示屏结合了智慧手机等常用的电容式触控技术,只需用手指触摸画面就可操作多种多样的功能.   佳能IXUS155搭载了一枚两千万像素1/2.3英寸CC

佳能IXUS155性能和尼康D5200性能对比详解

给各位摄影爱好者们来详细的解析分享一下佳能IXUS155的性能和尼康D5200的性能对比. 解析分享: 佳能IXUS155搭载了一枚两千万像素1/2.3英寸CCD传感器,是佳能卡片机中首款达到两千万像素的相机. 而尼康D5200采用了3英寸宽视角约92.1万像素的大尺寸TFT LCD液晶显示屏,显示屏向左侧打开的角度范围为0–180°,打开时还可以向前翻转180°或向后翻转90°.   佳能IXUS155无论是拍摄广阔的风景还是捕捉距离较远的事物,用户无需移动相机,只需要将镜头拉近拉远就能够轻松

佳能650D相机性能与宾得K-30相机性能对比详解

给各位摄影爱好者们来详细的解析分享一下佳能650D相机的性能与宾得K-30相机的性能对比. 解析分享: 宾得K-30是绝杀佳能650D的最有力的选手.650D面对K-30,还有把握取胜的就只剩带有触摸功能的旋转屏幕,关于这一点,650D还真的是打遍武林无敌手,但相信日后肯定越来越多单反配有这样的触摸屏.     宾得K-30除了屏幕没有用上旋转结构,以及传感器像素依然停留在1600万级别外,各项硬件配置都达到了中端单反应有的水平. 视野率100%的取景器.九个十字对焦点.6fps连拍.防尘防水滴

佳能IXUS155性能和佳能60D性能对比详解

给各位摄影爱好者们来详细的解析分享一下佳能IXUS155性能和佳能60D性能的对比. 对比分享: 佳能IXUS155搭载了一枚两千万像素1/2.3英寸CCD传感器,是佳能卡片机中首款达到两千万像素的相机,也打破了仅有索尼使用两千万像素级别传感器的垄断,也让卡片相机逐步走进两千万时代,所以可以看出佳能对这款卡片机给予了非常大的期望. 而佳能60D采用了一块有效像素为1800万的APS-C传感器,高感光度下的画质表现不错,搭配DIGIC 4代影像处理.   佳能IXUS155使用了一枚10倍光学变焦

佳能600D相机性能和尼康D5100相机性能对比详解

给各位摄影爱好者们来详细的解析分享一下佳能600D相机的性能和尼康D5100相机的性能对比. 解析分享: 佳能600D和尼康D5100这两款相机在性能上面都差不多,都是初级入门单反相机.在手感上面,尼康D5100更好,在成像上面,佳能600D相机比较肉. 照片质量上,尼康D5100相机拍出来的照片颜色比较锐,佳能600D相机拍出来的照片比较柔和.网友们可以根据自己的需求进行选择,小编再对这两款相机的具体参数进行描述,网友可以参考!     佳能600D参数 这款相机是2011年2月上市的一款初级

佳能G1X相机性能和佳能7D相机性能对比详解

给各位摄影爱好者们来详细的解析分享一下佳能G1X相机的性能和佳能7D相机的性能对比. 解析分享: 佳能G1X的镜头采用了4倍三段式光学变焦镜头,等效28-112mm,光圈范围为F2.5-16,而最近对焦距离为20厘米(广角端),85厘米(长焦端,支持了1080p(1920×1080 24p)全高清视频拍摄功能. 而佳能7D支持1920×1080像素拍摄,还提供1280×720像素和640×480像素视频拍摄,并且在中国常用的PAL制式下可以记录最高25fps的全高清视频和50fps的非全高清视频

佳能A4000 IS和佳能7D相机性能对比详解

给各位摄影爱好者们来详细的解析分享一下佳能A4000 IS和佳能7D相机的性能对比. 解析分享: 佳能A4000 IS的镜头使用的是三段式伸缩设计,等效35mm焦距则为28-224毫米,8倍光学变焦,可拍摄最大分辨率4608×3456照片,720P双色球网高清短片,内置闪光灯. 而佳能7D支持1920×1080像素拍摄,还提供1280×720像素和640×480像素视频拍摄,并且在中国常用的PAL制式下可以记录最高25fps的全高清视频和50fps的非全高清视频,在北美.日韩常用到NTSC制式可