首頁 開發工具 composer 分享composer autoload自動載入效能優化指南

分享composer autoload自動載入效能優化指南

Aug 05, 2020 pm 01:10 PM
composer

下面由composer教學專欄為大家介紹 composer autoload 自動載入效能最佳化指南,希望對需要的朋友有幫助!

分享composer autoload自動載入效能優化指南

composer 提供的 autoload 機制使得我們組織程式碼和引入新類別庫非常方便,但是也使專案的效能下降了不少 。

composer autoload 慢的主要原因在於來自對PSR-0 和PSR-4 的支持,載入器得到一個類別名稱時需要到檔案系統裡尋找對應的類別檔案位置,這導致了很大的效能損耗,當然這在我們開發時還是有用的,這樣我們新增的新的類別檔案就能即時生效。但是在生產模式下,我們想要最快的找到這些類文件,並載入他們。

因此 composer 提供了幾種最佳化策略,以下說明下這些最佳化策略。

第一層級(Level-1)最佳化: 產生classmap

#如何運作:

##執行指令

composer dump-autoload -o(-o 等同於--optimize)

原理:##這個指令的本質是將PSR-4/PSR- 0 的規則轉換為了classmap 的規則, 因為classmap 中包含了所有類別名稱與類別檔案路徑的對應關係,所以載入器不再需要到檔案系統中尋找檔案了。可以從 classmap 直接找到類別檔案的路徑。

注意事項

建議開啟 opcache , 這樣會極大的加速類別的載入。

php5.5 以後的版本預設自帶了 opcache 。

這個指令並沒有考慮到當在classmap 中找不到目標類別時的情況,當載入器找不到目標類別時,仍舊會根據PSR-4/PSR-0 的規則去檔案系統中查找

第二層級(Level-2/A)最佳化:權威的(Authoritative)classmap

執行指令:

執行指令

composer dump-autoload -a

(-a 等同於--classmap-authoritative)##原理

執行這個指令隱包含的也執行了Level-1 的指令, 也就是同樣也是產生了classmap,差別在於當載入器在classmap 中找不到目標類別時,就不會再去檔案系統中尋找(即隱含的認為classmap 中就是所有合法的類,不會有其他的類了,除非法調用)

注意事項

#如果你的項目在運行時會生成類,使用這個優化策略會找不到這些新產生的類別。

第二層級(Level-2/B)最佳化:使用APCu cache

執行指令:

執行指令composer dump-autoload --apcu

原理:

使用這個策略需要安裝apcu 擴充功能。

apcu 可以理解為一塊內存,並且可以在多進程中共享。

這個策略是為了在Level-1 中classmap 中找不到目標類別時,將在檔案系統中找到的結果儲存到共享記憶體中, 當下次再尋找時就可以從記憶體中直接返回,不用再去檔案系統中再次查找。

在生產環境下,這個策略一般也會與Level-1 一起使用, 執行composer dump-autoload -o --apcu, 這樣,即使生產環境下生成了新的類,只需要文件系統中查找一次即可被緩存, 彌補了Level-2/A 的缺陷。

如何選擇最佳化策略?

要根據自己專案的實際情況來選擇策略,如果你的專案在運行時不會產生類別檔案並且需要composer 的autoload 去加載,那麼使用Level-2/A 即可,否則使用Level-1 及Level-2/B是比較好的選擇。

幾個提示

Level-2的最佳化基本上都是Level-1 優化的補充,Level-2/A 主要是決定在classmap 中找不到目標類別時是否繼續找下去的問題,Level-2/B 主要是在提供了一個快取機制,將在classmap 中找不到時,將從檔案系統中找到的檔案路徑快取起來,加速後續查找的速度。
  • 在執行了 Level-2/A 時,表示在 classmap 中找不到不會繼續找,此時 Level-2/B 是不會生效的。
  • 不論那種情況都建議要開啟 opcache, 這會極大的提高類別的載入速度,我目測有效能提升至少 10倍。
  • #

以上是分享composer autoload自動載入效能優化指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Composer 的進階功能:別名、腳本與衝突解決 Composer 的進階功能:別名、腳本與衝突解決 Jun 03, 2024 pm 12:37 PM

Composer提供進階功能,包括:1.別名:定義套件便捷名稱以便重複引用;2.腳本:安裝/更新套件時執行自訂指令,用於建立資料庫表或編譯資源;3.衝突解決:使用優先權規則、滿足性限制和套件別名解決多個套件對同個依賴版本的不同需求,以避免安裝衝突。

PHP 微服務容器化的敏捷開發與維 PHP 微服務容器化的敏捷開發與維 May 08, 2024 pm 02:21 PM

答案:PHP微服務採用HelmCharts部署進行敏捷開發,並使用DockerContainer容器化以實現隔離和可擴展性。詳細描述:使用HelmCharts自動​​部署PHP微服務,實現敏捷開發。 Docker映像允許對微服務進行快速迭代和版本控制。 DockerContainer標準隔離微服務,而Kubernetes負責管理容器的可用性和可擴充性。利用Prometheus和Grafana監控微服務效能和健康狀況,並創建警告和自動修復機制。

PHP 數組轉物件的常見方式有哪些? PHP 數組轉物件的常見方式有哪些? Apr 28, 2024 pm 10:54 PM

PHP陣列轉物件的方法:使用stdClass類別使用json_decode()函數使用第三方函式庫(如ArrayObject類別、Hydrator函式庫)

PHP 程式碼版本控制與協作 PHP 程式碼版本控制與協作 May 07, 2024 am 08:54 AM

PHP程式碼版本控制:PHP開發中常用的版本控制系統(VCS)有兩個:Git:分散式VCS,開發人員本地儲存程式碼庫副本,方便協作和離線工作。 Subversion:集中式VCS,程式碼庫唯一副本儲存在中央伺服器上,提供更多控制。 VCS幫助團隊追蹤變更、協作並回滾到早期版本。

PHP CI/CD 在 DevOps 專案中的作用 PHP CI/CD 在 DevOps 專案中的作用 May 08, 2024 pm 09:09 PM

PHPCI/CD是DevOps專案中的關鍵實踐,它可實現自動化建置、測試和部署流程,從而提高開發效率和軟體品質。典型的PHPCI/CD管道包含以下階段:1)持續整合:每當程式碼發生變更時,都會自動建置和測試程式碼。 2)持續部署:透過自動部署經過測試和整合的程式碼到生產環境,從而加快交付速度。透過實施PHPCI/CD管道,可以提高開發效率,改善軟體質量,縮短上市時間並提高可靠性。

PHP 資料結構的視覺化技術 PHP 資料結構的視覺化技術 May 07, 2024 pm 06:06 PM

PHP資料結構視覺化有三種主要技術:Graphviz:開源工具,可建立圖表、有向無環圖和決策樹等圖形表示。 D3.js:JavaScript函式庫,用於建立互動式、資料驅動的視覺化,從PHP產生HTML和數據,再用D3.js在客戶端視覺化。 ASCIIFlow:用於建立文字表示資料流程圖的函式庫,適合流程和演算法的視覺化。

PHP數組分頁中如何使用Redis快取? PHP數組分頁中如何使用Redis快取? May 01, 2024 am 10:48 AM

使用Redis快取可以大幅優化PHP數組分頁的效能。可透過以下步驟實現:安裝Redis客戶端。連接到Redis伺服器。建立快取數據,將每頁資料儲存到Redis雜湊中,金鑰為"page:{page_number}"。從快取中獲取數據,避免對大型數組進行昂貴的操作。

如何使用 PHP CI/CD 實現快速迭代? 如何使用 PHP CI/CD 實現快速迭代? May 08, 2024 pm 10:15 PM

答:利用PHPCI/CD實現快速迭代,包括設定CI/CD管道、自動化測試和部署流程。設定CI/CD管道:選擇CI/CD工具,配置程式碼儲存庫,定義建置管道。自動化測試:編寫單元和整合測試,使用測試框架簡化測試。實戰案例:使用TravisCI:安裝TravisCI,定義管道,啟用管道,查看結果。實現持續交付:選擇部署工具,定義部署管道,自動化部署。效益:提高開發效率、減少錯誤、縮短交貨時間。

See all articles