下面由composer指令使用教學欄位來介紹關於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 最佳化結合使用。您必須選擇一個,因為它們以不同的方式解決相同的問題。以上是composer自動載入器優化的詳細內容。更多資訊請關注PHP中文網其他相關文章!