2012-05-18 37 views
1

我現在正在寫一個PHP框架。我想知道在請求期間php/includerequire_once/include_once文件太多會減慢嗎?做太多需求/包括減慢PHP

+0

可能是重複的,請檢查這些帖子。 http://stackoverflow.com/questions/3589117/using-too-many-php-includes-a-bad-idea和http://stackoverflow.com/questions/2198253/will-including-unnecessary-php-files- slow-down- – verisimilitude

回答

0

除非您使用緩存庫,否則每次請求時都會一次又一次地包含這些文件。肯定會減慢速度。創建一個只有include -s什麼需要是include -ed的框架。

+0

並使用字節碼緩存,如APC! – Niko

1

當然會的。多次做任何事都會導致速度減慢。

儘管更嚴重的說法是,與內存中發生的任何事情相比,接觸磁盤的IO操作都非常緩慢。因此,在使用大型框架時(包括文件),通常會成爲主要的性能因素(只需查看Zend Framework ...)。

但是,通常有緩解這種情況的方法,如APC和類似的op代碼緩存。

有時也採用編程方法。例如,如果我沒有記錯,Doctrine 1有能力將所有東西都捆綁到1個巨型文件中,以減少IO調用。

如果有疑問,請對您的框架編寫的應用程序進行一些深入分析,看看include/require /等是否是主要的慢點之一。

1

是的,這會減慢您的應用程序。 *_once調用通常比較昂貴,因爲必須檢查該文件是否已包含在內。隨着包括很多,有很多的硬盤訪問和大量的內存使用捆綁。我使用Zend Framework開發了應用程序,每次請求總共包含150到200個文件 - 您確實可以看到對整體性能的影響。

+1

這個基準測試表明'require'和'require_once'之間的速度沒有明顯的差別:http://www.php.net/manual/en/function.require-once.php#90017 – Kaivosukeltaja

+0

沒有明顯的區別!=沒有區別。如果基準是在一個框架上完成的(包含/需要在另一個包含/需求內)並且由足夠數量的請求啓動,那麼這可能是明智的。 – LeleDumbo

+0

然而,主要問題是您通常會在每個文件頂部有很多'require_once'調用,包括所有必需的類。因此可能會有20次嘗試加載特定文件,其中19次會導致開銷過大。 – Niko

1

您包含的文件越多,將會增加一些負載。但是,如果必須在require和require_once之間進行選擇,那麼require_once/include_once會承擔更多的負載,因爲服務器需要執行檢查以查看是否在其他地方包含了相同的文件。所以如果你可以避免這種情況,至少你可以提高性能。