2010-08-06 43 views
5

腳本性能調優的最佳做法是什麼?會減少包含/需要提高性能嗎?

這一個?

require_once("db.php"); 

if (!is_cached()) { 
    require_once("somefile.php"); 
    require_once("somefile2.php"); 
    //do something 
} else { 
    //display something 
} 

還是這個?

require_once("db.php"); 
require_once("somefile.php"); 
require_once("somefile2.php"); 

if (!is_cached()) { 
    //do something 
} else { 
    //display something 
} 

是否值得將包含/要求放入流量控制結構或不?

謝謝

回答

2

是的,它會提高性能,與別人說的相反,影響可能不會忽略不計。

當您包含/需要文件時,PHP將檢查所有定義的include_paths,直到它找到該文件或沒有其他要檢查的內容。根據包含路徑的數量和要包含的文件數量,這將對您的應用程序產生嚴重影響,特別是在預先包含每個文件時。懶惰包括(如在你的第一個例子),或者 - 甚至更好 - using the Autoloader is advisable.

相關閱讀,在更多的細節解決了這個:

*的給出的建議有適用於任何應用或框架

+0

是的,我已經在我的應用程序中使用自動加載,但是這個應用程序不能使用自動加載,因爲它有太多的第三方類使用相當奇怪的類命名。 :( – Kirzilla 2010-08-06 13:22:05

+0

@Kirzilla你可以考慮設置一個自定義的回退自動加載器,它有一個文件類的列表(「ThirdPartyPieChartClass」=>「/tools/piecharts/index.php」)等等,並加載所需的文件,而不是一次全部包含它們 – 2010-08-06 13:24:09

+0

對不起,我的英語不是很好,據我所知,你的意思是我必須列出異常列表,然後做一些事情,比如if(isset($ exceptions [$ classname ])){require_once($ exceptions [$ classname])}'?當然在包含/需要檢查類名是否已經存在之前 – Kirzilla 2010-08-06 13:30:20

1

是的,它會提高性能,但它是非常非常小,因此是不值得的。

2

包含和要求的設計部分允許您組織代碼並使維護軟件更容易。雖然技術上來說使用包含的性能會受到影響,但它可以忽略不計,並且可以通過提高軟件的可維護性來抵消。特別是如果你使用操作碼緩存。我不會擔心這一點,並把它歸結爲不成熟的優化。

2

如果所需文件很大,並且沒有可用的字節碼高速緩存,它有時可能值得。

然而,這個問題並不是真的include()語句的數量,而是包含的數據量。您在請求中包含的未使用的代碼越少越好。 對於整體來說,一個很好的補救措施是將代碼分割成更小的代碼,或者,如果你的應用程序主要是面向對象的,那麼使用PHP的autoloading特徵。

我見過託管的軟件包,其中未纏繞單片包括可節省高達半秒共享 - 這是一個很多

此外,包括PHP代碼得到解析和佔用內存,無論它執行與否。精益對象的清潔結構通常是最佳的方式。

+0

我在服務器上啓用了eAccelerator – Kirzilla 2010-08-06 13:12:10

+0

@Kirzilla然後我會做一些分析,找出可以獲得多少。 – 2010-08-06 13:19:46

0

對包含文件使用絕對路徑會顯着提高性能。使用Apache Benchmark進行測試,看看它是否沒有。

+0

是的,這就是爲什麼我只有我在一條路上nclude_path – Kirzilla 2010-08-06 13:49:34