您好,登錄后才能下訂單哦!
這篇文章主要介紹了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自動加載器優化的方法”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。