2010-08-15 44 views
4

基於Zend Framework和Doctrine的我的應用程序在每個請求中包含> 300個文件。他們大多是相同的文件。減少包含文件的數量

這是一個相當大的開銷。部分由Zend_Cache(和Memcache)解決,但並不是所有的頁面都可以被緩存。

  • 如何減少此數量?如何加快速度?

原則有一個選項compile the needed files這似乎是相當理性的生產服務器和應用程序的最終版本。

我的計劃是也編譯其他庫(我已經剝離了所有require_once's)。

  • 是否有任何工具可用於此任務?也許一些緩存驅動程序自動執行它?如何設置它們?
+2

300+聽起來有點多。他們都是需要的類嗎?您最大限度地使用Autoloader嗎? – 2010-08-15 19:08:39

+1

你使用操作碼緩存嗎? – Artefacto 2010-08-15 19:09:36

+0

@Pekka我已經剝離了所有需要的東西,所有文件都由Zend的自動加載器加載。 – takeshin 2010-08-15 19:45:18

回答

1

最好的選擇是使用APC或Zend_Accelerator。但是,您仍然可以製作將這些類合併爲一個文件的這些「編譯」腳本。這將所需的IO降到最低。不幸的是,您還需要重寫自動加載過程,以便查找適當的文件。你通常可以將常見的類壓縮在一起(Zend_Form + Elements + Decorators,經常使用的驗證器,Request + Response + Router + Controller,Zend_Db + adapters + Zend_Db_Select等)。主要是每個請求總是使用的類可以很容易地壓縮並手動包含在一個文件中。最好的辦法是添加調試通話,從而節省所有包含的文件(http://www.php.net/get_included_files)到數據庫,然後:

SELECT * FROM files GROUP BY filename WHERE COUNT(filename) = $numOfRequests 

所有文件的結果可以安全地合併成一個單一的文件,其中包括前Bootstrap逼近:)

+0

我寫了一個腳本來收集所有包含,但問題是這些文件相互依賴。如何確定正確的順序? – takeshin 2010-08-16 09:10:37

+1

試用/錯誤或修復錯誤一個接一個。總體思路是首先接口,然後是抽象類和其他類。許多依賴項是在代碼中調用方法之前不需要的。 – 2010-08-18 11:08:58

2

php文件包含的開銷通常可以通過操作碼緩存來抵消,例如APC,這是一個通過pecl提供的擴展。操作碼緩存一般通過緩存編譯的字節碼來工作,以便僅在第一次請求時纔會發生讀取和解析源的開銷。這將極大地否定任何源代碼編譯對您的php文件的需求或好處。

+0

我已安裝APC擴展。有什麼聰明的方法可以用APC緩存替換application.ini中設置的文件緩存? – takeshin 2010-08-15 21:03:19

+0

@takshin APC將自動緩存操作碼。你可以打開狀態(在生產中),所以它甚至不會檢查文件系統上的文件是否已經更新。如果你想緩存應用程序數據,你也可以使用APC。我相信Zend_Cache有一個APC的後端,它有利於這一點。 – timdev 2010-08-15 21:23:32

+0

與APC一起使用時,300個文件實際上什麼都沒有。它們將從共享內存中供應,並且沒有問題。 – beberlei 2010-08-16 11:29:01