国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > PHP > 正文

PHP autoload與include性能比較

2024-05-04 23:05:53
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

自php5后,官方大大豐富了對(duì)面向?qū)ο蟮闹С郑渲杏袀€(gè)重要改變:引入了__autoload()函數(shù),從此不再需要在php腳本的header寫(xiě)一堆的require或include了,用php函數(shù)手冊(cè)中的話說(shuō):”它會(huì)在試圖使用尚未被定義的類(lèi)時(shí)自動(dòng)調(diào)用”。

這一機(jī)制大大減輕了開(kāi)發(fā)人員的負(fù)擔(dān),只要在架構(gòu)初期考慮好了目錄結(jié)構(gòu)和命名規(guī)范,在開(kāi)發(fā)過(guò)程中,需要再為代碼中要用到的類(lèi)分別去require相應(yīng)的文件,減少了大量代碼。

但這樣一來(lái),也容易出現(xiàn)運(yùn)行一個(gè)程序,某個(gè)類(lèi)文件被include多次,例如有以下四個(gè)腳本:

#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

當(dāng)執(zhí)行script1.php時(shí), include ‘include2.php’; 這行代碼被執(zhí)行了一次。而執(zhí)行script2.php時(shí),這行代碼被執(zhí)行了兩次。

這里只是一個(gè)簡(jiǎn)單的例子,在實(shí)際的項(xiàng)目中,include2.php被include的次數(shù)可能更多。這樣反復(fù)的include,是否會(huì)影響性能呢?為此我寫(xiě)了個(gè)腳本來(lái)測(cè)試。

#file:simpleclass.phpclass simpleclass {        public function __construct() {                echo get_time() . "/r/n";        }}
#file:php_include.phpfor($i  = 0;$i < $loop;$i++) {        include_once "simpleclass.php";        new simpleclass();}

當(dāng)$loop值為1時(shí),腳本耗時(shí)約0.00018906593322754秒,當(dāng)$loop為1000時(shí),腳本耗時(shí)約0.076701879501343秒。

如果我們用autoload實(shí)現(xiàn)呢?

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

在這段代碼中,我定義了__autoload函數(shù),幾乎一樣的腳本,當(dāng)$loop為1時(shí),耗時(shí)0.0002131462097168秒,而當(dāng)$loop為1000時(shí),耗時(shí)僅為前面代碼的1/7,0.012391805648804秒。

但請(qǐng)注意看simpleclass的代碼,其中輸出了一行字符串,如果去掉這行輸出后再比較,會(huì)是什么樣的結(jié)果呢?

在$loop同為1000的情況下,前者耗時(shí)0.057836055755615秒,而使用了autoload后,僅僅0.00199294090271秒!效率相差近30倍!

從上面的測(cè)試可以看出,當(dāng)文件僅僅被include一次,autoload會(huì)消耗稍微多一點(diǎn)的時(shí)間,但如果在文件被反復(fù)include的情況下,使用autoload則能大大提高系統(tǒng)性能。

至于是否要使用autoload來(lái)解放程序員,這就仁者見(jiàn)仁,智者見(jiàn)智了。在我看來(lái),條件允許的前提下,犧牲這一點(diǎn)性能(某些情況下,甚至可能是提升性能)更為便捷的開(kāi)發(fā),是值得的。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 汝阳县| 新干县| 资溪县| 布拖县| 集贤县| 黑水县| 石柱| 五常市| 介休市| 新巴尔虎左旗| 涞水县| 延川县| 延长县| 津市市| 南华县| 衢州市| 长垣县| 光泽县| 集贤县| 庆安县| 淮南市| 望谟县| 黑河市| 卓资县| 荆州市| 汉沽区| 克山县| 石泉县| 拜泉县| 榆中县| 浦东新区| 齐齐哈尔市| 鄂托克旗| 兰西县| 加查县| 黄山市| 佛学| 库车县| 密山市| 定襄县| 衡南县|