2011-04-30 42 views
3

我讀過很多關於ZF性能文章,仍然無法理解,如果我已經啓用的字節碼緩存(APC),它是有意義的使用一些其他的技巧?例如。禁用自動加載,並使用一個大的php文件,而不是所有必要的類。Zend框架的性能(自動加載)

+0

的一些想法http://stackoverflow.com/questions/3777765/using-zend-framework-for-highload-projects的可能的複製。 – 2011-05-01 00:05:32

回答

10

我很驚訝地發現,這是網站上標記性能,自動加載,PHP的唯一問題。爲了消除#1自動加載的神話,這是一個比這更好的地方:

現代的,精心設計的自動加載機不會破壞APC(或PHP 5.5的OPcache),並且性能也不會比require_once更糟糕當然是函數調用開銷)。

爲什麼?那麼,現在我們有spl_autoload_register,它可以讓你添加多個自動加載處理程序。這允許每個第三方庫發佈自己的自動加載器,知道如何加載該庫的文件,並跳過其餘部分。

例如,Zend Framework 1的Zend_Loader_Autoloader限制自己嘗試加載以特定僞名稱空間開頭的類 - Zend_(以及用戶要求加載的其他任何內容)。如果它不以所需的僞命名空間開始,它只會返回並讓堆棧中的下一個加載器運行。它也知道它可以在Zend/Foo/Bar/Baz.php找到Zend_Foo_Bar_Baz,所以它不需要需要手工搜索包含路徑。像其他現代框架自動加載器一樣,它遵循PSR-0 autoloading standard。通過composer以同樣的方式也得到自動構建命名空間中自動加載機安裝

的依賴。

這是包括路徑淘洗,使設計不佳的自動裝載機吸。你通常在現代PHP代碼中看不到這些。激烈的文件系統stat調用從試圖找到文件的結果是一個頻繁的性能拖動。查看this presentation by PHP creator Rasmus Lerdorf,其中他通過基準測試,分析和仔細刪除諸如stat調用等慢速操作來提高Wordpress的性能。

從昔日的require_once -everything-的前期是爲不必要當你使用現代圖書館和沒有蘇茨基自動加載。如果您使用APC,則只有disable apc.stat纔是主要勝利,如果使用OPcache,則只能使用OPcache's validate_, revalidate_, and enable_file_override INI options

TL;博士:除非你知道stat婷包含文件是你的最大瓶頸,在Zend自動加載磁帶機是蠻好的,你不需要求助於require_once巨星。

+0

謝謝你的詳細解答,對我來說這是一個非常有價值的信息。我沒有忘記它。這一次我一直在研究))) – heximal 2011-05-06 10:01:03