我有一個網站在「目錄」頁面中有大約150個require_once調用。每個頁面在該目錄上調用require_once以確保加載所有必需的文件。在這個目錄上調用require_once需要5到15秒的時間,並且我沒有簡單的方法來減少每個頁面需要的類的數量。優化許多require_once調用
所以:有什麼辦法可以加快這個過程嗎?我認爲它需要完成一次,但我也認爲它會被緩存到會話中,這似乎並不是這種情況,因爲這種5-15秒的開銷在每個單頁負載上都是相同的。
希望這是有道理的。
謝謝!
我有一個網站在「目錄」頁面中有大約150個require_once調用。每個頁面在該目錄上調用require_once以確保加載所有必需的文件。在這個目錄上調用require_once需要5到15秒的時間,並且我沒有簡單的方法來減少每個頁面需要的類的數量。優化許多require_once調用
所以:有什麼辦法可以加快這個過程嗎?我認爲它需要完成一次,但我也認爲它會被緩存到會話中,這似乎並不是這種情況,因爲這種5-15秒的開銷在每個單頁負載上都是相同的。
希望這是有道理的。
謝謝!
背後require_once的想法是要確保:
PHP在內存中存儲哪些文件已被加載。如果你在一個文件上調用require_once,然後再調用它,PHP甚至不會查找該文件,它會發現它已經被加載,並且不會讀取該文件。
這讓我覺得require_once不是你的頁面加載問題的罪魁禍首。
但是,我可能會誤解這個問題。如果你的意思是說每個require_once都不相同,那麼這就是另一回事。如果它們用於加載類,請查看PHP自動加載函數。 PHP: Autoloading Classes。這隻會加載被調用的類。
我的第一個猜測是你在你的一個必需的腳本中定義了一些邏輯。如果他們都只是類定義文件,沒有理由要求他們需要5-15秒。
您是否有理由在每個頁面上包括每個班級?如果可能的話,你應該看看autoloading classes。
150包含庫?無論如何,你使用fastCGI還是php-eaccelerator?它應該有很大的幫助。 – 2012-01-10 23:55:40
我不確定在哪裏,因爲你沒有提供很多細節,但我很肯定存在一些邏輯缺陷。一個目錄可能包含從數據庫中拉出的數百個項目我只是不明白爲什麼你要在每個項目中包含一個文件... – Frankie 2012-01-11 00:04:32
a)確保你使用像APC這樣的操作碼緩存。 b)使用xdebug(或其他工具)並分析您的應用程序。您將能夠快速找到瓶頸。 – 2012-01-11 00:07:57