本篇內容介紹了“php中inlcude()和require()的性能對比”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
成都創(chuàng)新互聯(lián)公司服務項目包括鄰水網(wǎng)站建設、鄰水網(wǎng)站制作、鄰水網(wǎng)頁制作以及鄰水網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,鄰水網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到鄰水省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!include性能
復制代碼 代碼如下:
include('include.php');
當然這種方式并沒有錯誤,只不過在效率上它比下面的方式要稍稍差些:
復制代碼 代碼如下:
include(realpath(dirname(_FILE_)).DIRECTORY_SEPARATOR.'include.php');
這種方式我們可能需要輸入更多一些,但相對于前面那種需要PHP引擎去include_path 中迭代查找所有名稱為'include.php'才能查找到相應對象來說,dirname(__FILE__)這種絕對路徑的指定會讓系統(tǒng)迅速定位到相應文件。
在PHP中常量__FILE__ 其實跟C#中的AppDomain.CurrentDomain.BaseDirectory非常類似,它返回的是當前代碼正在執(zhí)行的代碼所在文件的絕對路徑。而函數(shù)dirname()則返回其父文件夾路徑。
另外一個更查找效率高,并且書寫簡單的方式是include('./include.php'),這相當于告訴系統(tǒng)查找當前路徑下的'include.php'文件。
在大型系統(tǒng)中我們常常使用另外一個更好的方式,我們常常在路由文件或其他初始化文件中加入如下代碼:
復制代碼 代碼如下:
define('APP_PATH',realpath(dirname(_FILE_)));
這相當于給系統(tǒng)添加了一個全局變量來指出系統(tǒng)根目錄,當我們后面需要引用某具體路徑下的文件時我們就可以使用如下代碼了:
復制代碼 代碼如下:
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
當執(zhí)行script1.php時, include ‘include2.php'; 這行代碼被執(zhí)行了一次。而執(zhí)行script2.php時,這行代碼被執(zhí)行了兩次。
這里只是一個簡單的例子,在實際的項目中,include2.php被include的次數(shù)可能更多。這樣反復的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實現(xiàn)呢?
復制代碼 代碼如下:
#file:php_autoload.php
function __autoload($class_name) {
include_once $class_name . '.php';
}for($i = 0;$i < $loop;$i++) {
new SimpleClass();
}
在這段代碼中,我定義了__autoload函數(shù),幾乎一樣的腳本,當$loop為1時,耗時0.0002131462097168秒,而當$loop為1000時,耗時僅為前面代碼的1/7,0.012391805648804秒。
但請注意看SimpleClass的代碼,其中輸出了一行字符串,如果去掉這行輸出后再比較,會是什么樣的結果呢?
在$loop同為1000的情況下,前者耗時0.057836055755615秒,而使用了autoload后,僅僅0.00199294090271秒!效率相差近30倍!
從上面的測試可以看出,當文件僅僅被include一次,autoload會消耗稍微多一點的時間,但如果在文件被反復include的情況下,使用autoload則能大大提高系統(tǒng)性能。
至于是否要使用autoload來解放程序員,這就仁者見仁,智者見智了。在我看來,條件允許的前提下,犧牲這一點性能(某些情況下,甚至可能是提升性能)更為便捷的開發(fā),是值得的。
include()和require()性能
對include()來說,在 include()執(zhí)行時文件每次都要進行讀取和評估;
而對于require()來說,文件只處理一次(實際上,文件內容替換了require()語句)。
這就意味著如果有包含這些指令之一的代碼和可能執(zhí)行多次的代碼,則使用require()效率比較高。
另一方面,如果每次執(zhí)行代碼時相讀取不同的文件,或者有通過一組文件疊代的循環(huán),就使用include(),
因為可以給想要包括的文件名設置一個變量,當參數(shù)為include()時使用這個變量。
“php中inlcude()和require()的性能對比”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質量的實用文章!