Composer 2.0 發布帶來的效能最佳化、新功能和升級指南
Composer 在昨天程式設計師節這天發布了2.0 版本,本次版本距離Composer 1.0 beta 版本發布已經過去了8 年之久,作為PHP 套件管理工具,八年時間內,Composer 給大象(PHP 的Logo 是一頭大象)裝上了翅膀,為PHP 專案開發帶來了全新的擴充包(或稱為依賴套件)安裝和管理體驗,降低它們維護成本的同時也極大豐富了PHP 的生態系。
本次新版本提供了許多新功能,更重要的是效能也有了大幅提升。如果有興趣的話,你可以在 Composer GitHub 倉庫查看詳細的升級細節,這裡學院君給大家簡單介紹下新舊版本在流行 PHP 項目中的性能對比、主要的新特性以及如何升級到 Composer 2.0。
效能最佳化
新版本從Composer 和packagist.org 之間使用的協定到依賴解析對幾乎所有程式碼都進行了徹底的重構,包括使用curl 並行下載檔案和約束評估的最佳化(即擴充包的版本控制)等,這些重構使得Composer 2.0 不論是速度還是記憶體使用方面都得到了大幅改進。
不過這些改進的真實表現取決於具體的使用場景,儘管官方在一些項目中得到了50% 性能提升的報告,但是不能以此為據給出適用於所有場景的確切數字,不過可以肯定的是,如果你還沒使用Composer 2.0,會對新版的體驗感到驚訝。
此外,require/remove 以及部分更新要比以前快得多,因為 Composer 現在只會載入修改過的擴充包對應的元資料。
下面是Composer 1 和Composer 2 在目前流行PHP 專案中的速度最佳化對比:
可以看到,對於Laravel 專案而言,效能提升了四倍左右。我自己體驗了下使用新舊版本初始化 Laravel 項目,確實肉眼可見的有了顯著的速度提升。
主要新功能一覽
我們簡單概覽下Composer 2.0 的一些重要更新:
##架構調整
對依賴更新內部執行的方式進行了重構,對你而言,現在可以看到更加確定性的更新,更新完成後,安裝流程會自動並發執行,從而避免只安裝到一半因網路問題導致流程終止。執行階段新特性
vendor/autoload.php 初始化時新增了平台偵測步驟,主要檢查目前PHP 版本和擴充包版本是否匹配,不匹配的話會初始化失敗。 在Composer 2.0 專案中,你可以在vendor/composer 目錄下看到一個新增的InstalledVersions 類,它會在每個專案中自動加載並且在運行時有效,可以透過它來檢查運行時項目中有效的擴充包及其版本號。 如果你的程式碼依賴這些執行時間新特性,可以在 composer.json 的 require 設定項中加入 "composer-runtime-api": "^2.0" 依賴宣告。錯誤報告最佳化
Composer 2.0 最佳化了依賴不能被解析時錯誤報告的顯示,現在的錯誤訊息會更短、更清晰、更少重複。帶有臨時約束的部分更新
現在你可以執行composer update vendor/package:1.0.* 升級指定擴充包(例如這裡的vendor/package)版本,它不會更新composer.json,也不會更新composer.lock 文件,如果你想添加這個臨時約束的同時更新所有依賴,需要使用composer update --with vendor/package:1.0.* 命令。升級到Composer 2.0
#升級到Composer 2.0 非常簡單,只需要執行以下指令:composer self-update --2