天天看點

php自動加載優化标準,composer自動加載器優化

下面由composer指令使用教程欄目給大家介紹關于composer自動加載器優化,希望對需要的朋友有所幫助!

php自動加載優化标準,composer自動加載器優化

自動加載器優化

通常情況下,Composer 的自動加載器運作速度相對而言是比較快的。 但是,由于 PSR-4 和 PSR-0 的自動加載規則是在最終解析一個類之前需要去檢查檔案系統。這會導緻自動加載的速度變得相當緩慢,但在開發環境中,這會是一種非常便捷的加載方式,因為當你建立了一個類時,加載器會立即發現并使用該類,而不需要你去重建自動加載器的配置。

這種加載規則導緻的問題在生産環境中才真正展現出來,在生産環境中,你可以在每次部署之前非常輕松的重建配置,而且在部署之間不會随機出現新類,是以你不需要其一直檢查檔案系統,你通常都希望自動加載能盡可能快速的完成。

出于以上原因,Composer 提供了一些自動加載器的優化政策。

注意:你不應該在開發環境下使用本文所述的任何一種優化政策,因為這會導緻你在添加或移除類時出現各種問題。事實上,在開發環境中應用這些設定所帶來的性能提升和其所帶來的問題相比,是遠遠不值得的。

優化級别 1:類映射生成

怎麼運作它呢?

有幾個選項可以啟用此功能:

在 composer.json 的配置中設定 "optimize-autoloader": true

使用 -o / --optimize-autoloader 調用安裝或更新

使用 -o / --optimize 調用 dump-autoload

它有什麼作用?

類映射生成實質上是将 PSR-4/PSR-0 規則轉換為類映射規則。這使得一切都快很多,因為已知的類映射會立即傳回路徑,而 Composer 可以保證類在那裡,是以不需要檔案系統檢查。

在 PHP 5.6+ 中,類映射也緩存在 opcache 中,這大大改善了初始化時間。如果確定啟用了 opcache ,那麼類映射應該會立即加載,類加載也會很快。

權衡

這種方法沒有真正的權衡。它應該始終在生産中啟用。

唯一的問題是它沒有跟蹤自動加載 (即,當它找不到給定的類時),是以那些回退到 PSR-4 的規則仍然有可能導緻檔案系統檢查速度變慢。要解決此問題,存在兩個二級優化選項,如果您對項目中不存在的類執行了大量的 class_exists 檢查, 那麼可以決定啟用這兩個選項。

優化級别 2/A :權威類映射

怎麼啟用它呢?

有幾個選項可以啟用此功能:

在 composer.json 的 config 鍵中設定 "classmap-authoritative": true

使用 -a / --classmap-authoritative 調用安裝或更新

使用 -a / --classmap-authoritative 調用 dump-autoload

它有什麼作用呢?

啟用此選項會自動啟用 1 級類映射優化。

這個選項很簡單,它說如果在類圖中找不到某些東西,那麼它就不存在,自動加載器不應該根據 PSR-4 規則試圖檢視檔案系統。

權衡

此選項能使自動裝填器始終快速傳回。另一方面,它還意味着如果由于某種原因在運作時生成類,則不允許自動加載。如果您的項目或任何依賴項執行此操作,那麼您可能會在生産中遇到 “未找到類” 的問題。小心啟用它。

注意:這不能與級别 2/B 優化結合使用。您必須選擇一個,因為它們以不同的方式解決相同的問題。

優化級别 2/B: APCu 緩存

怎麼啟用它呢?

有個選項可以啟用此功能:

在 composer.json 的配置鍵中設定 "apcu-autoloader": true

使用 --apcu-autoloader 調用安裝或更新

使用 --apcu 調用 dump-autoload

它有什麼作用?

此選項将 APCu 緩存添加為類映射的備用。它不會自動生成類映射,是以如果您願意,仍需手動啟用 1 級優化。

無論是否找到類,該事實總是緩存在 APCu 中,是以可以在下一個請求時快速傳回。

權衡

此選項需要 APCu ,它可能對您有用也可能不适用。它還使用 APCu 記憶體進行自動加載,但它是安全使用的,并且不會導緻找不到類,如上面的權威類映射優化。

注意:這不能與級别 2/A 優化結合使用。您必須選擇一個,因為它們以不同的方式解決相同的問題。