2012-07-16 59 views
3

我剛開始使用xdebug來剖析我的應用程序,並立即注意到結果中有些奇怪。顯示require_once函數中的一個佔用了大約12%的處理時間。在整個應用程序中還有不少其他調用require_once,並且它們都佔用了不到1%的處理時間。PHP/xdebug探查器require_once性能不佳

表現不佳的require_once包含的文件與其他文件沒有顯着差異或較大,所以我不確定可能導致問題的原因。有沒有人經歷過這樣的事情?

編輯:想提供一些信息。我正在使用XAMPP進行窗口分析。通常,應用程序在unix框上運行。我還沒有一個簡單的方法將xdebug放到盒子裏,所以我試圖用這種方式來比較結果可能是不可行的。

最後一個編輯:下面是情況下的代碼的想法,幫助(故意含糊其辭的標準CYA法律方面的原因等等等等等等):

這個類的一個用慢包括(test.inc ):

require_once('/xx/yy/zz/dao/basedao.inc'); 
require_once('/xx/yy/zz/vo/test.inc'); 

class TestDAO extends BaseDAO { 
    // bunch of code to handle database records and return VO objects 

這是要包含的文件:

require_once('/xx/yy/zz/vo/basevo.inc'); 

class Test extends BaseVO { 
    // bunch of properties, getters/setters, that kinda stuff 

我有一個內置完全相同的方式不少其他VO/DAO對象,沒有任何ISSU即全部位於相同的相應路徑內。

+0

最後一件事:你提到你不能在你的Linux平臺上進行調試。您可以嘗試在本地PC上創建虛擬機,以便本地運行Linux副本。它可能會讓您更準確地瞭解遠程運行代碼的方式,而不是Windows系統。 – Spudley 2012-07-16 21:52:16

+0

很棒的建議,明天我會試試! – cdwhatcott 2012-07-17 00:58:45

+0

我終於從Linux上的代碼中獲得了一些分析器結果,並且一切都看起來我是如何在第一個地方......:|大部分處理時間都花在您期望的地方,如數據庫調用和磁盤IO。以前突出的包括仍然稍微慢一點,但不是如此巨大的利潤。看起來這個文件是第一個包含其他一些常用文件的,所以它會比較慢一些。從現在開始,我會避免在Windows上進行基準測試,因爲我沒有解釋不同的結果。 – cdwhatcott 2012-07-18 14:55:23

回答

0

這的確聽起來很奇怪。絕對值得追求,儘管在看不到實際代碼的情況下很難做到這一點。單個require_once()的總節目時間的12%確實聽起來非常過分。

但這裏有關於調查的可能途徑的一些想法:

  1. require_once()保持已包含的文件的查找表,所以也許它的速度變慢不必指的是查找表。 如果這是原因,只要有可能,您可以使用require()而不是require_once()來解決。

  2. 也許這是路徑查找?你是否包含一個帶有文件名的路徑?如果沒有,它將檢查許多地方來查找文件;也許它並不在它看起來的第一個位置,在它可以包含它之前找到該文件需要更長的時間。 如果這是原因,可以通過更具體地瞭解代碼中的路徑來解決它。

希望有所幫助。有興趣聽聽這是如何解決的。

哦,順便說一句 - 如果你的代碼中最大的問題區域是require_once(),那麼這聽起來就像你在代碼中做得很好!我夢想的一天require_once()甚至顯示在我的分析報告中,更不用說有重大影響。

+0

感謝您的快速響應。我會在你的名單上看看#1,看看這是否會改變任何事情。至於#2,我正在使用該文件的絕對路徑,所以我無法想象它必須執行任何搜索。 – cdwhatcott 2012-07-16 20:58:58

+0

沒有變化,現在需求函數顯示爲佔用〜12%。這絕對是我遇到的陌生人問題之一。 – cdwhatcott 2012-07-16 21:02:22

+0

@cdwhatcott - 是的。非常奇怪。該文件是否與您包含的其他文件位於相同的目錄中?有什麼具體的目錄,這是一個問題? – Spudley 2012-07-16 21:08:00