1. 程式人生 > >include和require 效能優化

include和require 效能優化

1.引用檔案方式

對include()來說,在include()執行時檔案每次都要進行讀取和評估;而對於require()來說,檔案只處理一次(實際上,檔案內容替換了require()語句)。這就意味著如果有包含這些指令之一的程式碼和可能執行多次的程式碼,則使用require()效率比較高。另一方面,如果每次執行程式碼時相讀取不同的檔案,或者有通過一組檔案疊代的迴圈,就使用include(),因為可以給想要包括的檔名設定一個變數,當引數為include()時使用這個變數。

2.是否有條件引用

在PHP變成中,include()與require()的功能相同,但在用法上卻有一些不同,include()是有條件包含函式,而require()則是無條件包含函式。例如在下面的一個例子中,如果變數$somgthing為真,則將包含檔案somefile:
if($something){
include("somefile");
}
但不管$something取何值,下面的程式碼將把檔案somefile包含進檔案裡:
if($something){
require("somefile");
}
下面的這個有趣的例子充分說明了這兩個函式之間的不同。
$i = 1;
while ($i < 3) {
require("somefile.$i");
$i++;
}
在這段程式碼中,每一次迴圈的時候,程式都將把同一個檔案包含進去。很顯然這不是程式設計師的初衷,從程式碼中我們可以看出這段程式碼希望在每次迴圈時,將不同的檔案包含進來。如果要完成這個功能,必須求助函式include():
$i = 1;
while ($i < 3) {
include("somefile.$i");
$i++;
}

3.報錯

用例子來說話,寫兩個php檔案,名字為test1.php  和test2.php,注意相同的目錄中,不要存在一個名字是test999.php的檔案。
test.php
<?PHP
include  (”test999.php”);
echo  “abc”;
?>

test2.php
<?PHP
require (”test999.php”)
echo  “abc”;
?>

瀏覽第一個檔案,因為沒有找到test999.php檔案,我們看到了報錯資訊,同時,報錯資訊的下邊顯示了abc,你看到的可能是類似下邊的情況:
Warning: include(test1aaa.php) [function.include]: failed to open stream: No such file or directory in D:\WebSite\test.php on line 2

Warning: include() [function.include]: Failed opening ‘test1aaa.php’ for inclusion (include_path=’.;C:\php5\pear’) in D:\WebSite\test.php on line 2
abc

瀏覽第二個檔案,因為沒有找到test999.php檔案,我們看到了報錯資訊,但是,報錯資訊的下邊沒有顯示abc,你看到的可能是類似下邊的情況:
Warning: require(test1aaa.php) [function.require]: failed to open stream: No such file or directory in D:\WebSite\test.php on line 2

Fatal error: require() [function.require]: Failed opening required ‘test1aaa.php’ (include_path=’.;C:\php5\pear’) in D:\WebSite\test.php on line 2

現在就能很清楚的知道include和require的區別:include引入檔案的時候,如果碰到錯誤,會給出提示,並繼續執行下邊的程式碼,require引入檔案的時候,如果碰到錯誤,會給出提示,並停止執行下邊的程式碼。

如果php版本在5.0以上建議使用_autoload 函式,會自動例項化(動態)所需物件,效能大約是require的3倍左右