首页 > php教程 > php手册 > 正文

PHP autoload与include性能比较

php中文网
发布: 2016-06-21 08:57:21
原创
1053人浏览过

自PHP5后,官方大大丰富了对面向对象的支持,其中有个重要改变:引入了__autoload()函数,从此不再需要在php脚本的header写一堆的require或include了,用PHP函数手册中的话说:”它会在试图使用尚未被定义的类时自动调用”。

这一机制大大减轻了开发人员的负担,只要在架构初期考虑好了目录结构和命名规范,在开发过程中,需要再为代码中要用到的类分别去require相应的文件,减少了大量代码。

但这样一来,也容易出现运行一个程序,某个类文件被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() . "\r\n";
        }
}
登录后复制

#file:php_include.php
for(&#36;i  = 0;&#36;i < &#36;loop;&#36;i++) &#123;
        include_once "SimpleClass.php";
        new SimpleClass();
&#125;
登录后复制

当$loop值为1时,脚本耗时约0.00018906593322754秒,当$loop为1000时,脚本耗时约0.076701879501343秒。

如果我们用autoload实现呢?

Calliper 文档对比神器
Calliper 文档对比神器

文档内容对比神器

Calliper 文档对比神器 28
查看详情 Calliper 文档对比神器

#file:php_autoload.php
function __autoload(&#36;class_name) &#123;
        include_once &#36;class_name . '.php';
&#125;
 
for(&#36;i  = 0;&#36;i < &#36;loop;&#36;i++) &#123;
        new SimpleClass();
&#125;
登录后复制

在这段代码中,我定义了__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来解放程序员,这就仁者见仁,智者见智了。在我看来,条件允许的前提下,牺牲这一点性能(某些情况下,甚至可能是提升性能)更为便捷的开发,是值得的。



相关标签:
php
数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号