2009-12-21 40 views
9

許多框架利用spl_autoload_register()來動態加載類(即控制器和模型)。關於自動加載和操作碼緩存的問題有幾個帖子。特別是後一個由具有其@cletus引用@Rasmus使得一些語句這被證明是令人厭惡對於那些利用APC作爲操作碼緩存的響應:PHP5框架:自動加載和操作碼緩存

似乎沒有對於不影響操作碼緩存性能的任何可能的自動加載替代方法進行討論。

有沒有辦法解決事實自動加載類不會被添加到字節代碼緩存?

如果沒有,是否有任何替代方法來動態加載將被緩存的類?

+4

從我想起了我的mediawiki + APC的日子裏,自動加載的類將APC獲取緩存。 – jldupont 2009-12-21 17:49:27

+0

@jldupont - 我剛剛更新,以引用一個特別的迴應,使我感興趣寫這篇文章。 – 2009-12-21 18:21:44

回答

5

這個話題似乎仍然存在混淆,然而在大多數情況下,它歸結爲緩解vs性能。

一個好的郵件列表線程讀取會是這樣一個的Zend框架的郵件列表:

http://n4.nabble.com/ZF-and-Autoloading-td640085i20.html

現在,相關性就在這裏,因爲如果從繼承尚未定義 類,你可能會依靠自動加載定義它(儘管你可能還 依靠包括),實際上自動加載設備的存在可能 鼓勵您使用這樣的繼承。但這不是自動加載 帶來的麻煩(請參閱Ramus的「它不僅僅是自動加載」在 博客中,用於討論某些麻煩事的例子)。 所以正確的短語是「傾向於自動加載的人傾向於使用代碼來反抗編譯時綁定」。當然,其中不能看到 作爲自動加載錯誤,當然,只是避免自動加載將無助於 位 - 您還必須重寫代碼,以便編譯時綁定可能發生。例如,它與「新」自動加載的使用 無關。

作爲從效果上述減速 - 即不存在 編譯時結合 - 代碼確實變得有點慢,這樣 代碼可導致在一些模糊的情況下,以一定的麻煩操作碼緩存 (不是在自動加載的情況下 - 但在類的定義裏面 條件,或者上帝禁止的情況下,不同的定義創建 取決於條件) - 但它旁邊無關使用 自動加載自身。 放緩的量,然而,似乎是由 人大大exagerrated - 沒有什麼(我重複是明確的 - NOTHING)相比 由操作碼緩存提供的性能優勢因的缺席 磁盤操作和編輯階段。你大概可以用 組成一個人爲的基準,它會顯示一些重要的減速,但我不相信任何真正的應用程序都會注意到。

來源:http://n4.nabble.com/ZF-and-Autoloading-td640085i20.html#a640092

+2

[更新鏈接](http://osdir.com/ml/php.zend.framework.general/2007-01/msg00132.html)。 – Xeoncross 2012-02-24 16:55:31