要明白是什麼影響了Composer的執行速度,必須先理解Composer的執行原理。Composer的大致執行步驟如下:
1.分析你的composer.json檔案,找到所有需要安裝的第三方的名稱和對應的版本號
2.2.從本地快取目錄和Packagist伺服器獲取上述的第三方的資訊,包含最新版本,程式碼存放等等
3.3.分析依賴關係,根據包依賴、版本是否有更新等條件計算出最終需要安裝的第三方的清單
4.4.根據這份清單第三方的原始碼,根據引數的不同,方式會是用GitClone專案或者是直接Zip包
5.5.將第三方安裝到本地,一般是安裝在專案下的./vendor目錄,同時根據引數生成用於載入第三方的autoload檔案
分析:從上述步驟中可以看到Composer在執行時會有5個不同的階段,而其中1、2、3、4步都是會因為各種原因導致Composer執行速度緩慢的,類似composer-proxy這樣的Composer映象/代理站其實已經解決了第1、2步驟速度慢的問題,也就是加快從Packagist版本更新定義檔案慢的這一步。而3這一步由於PHP的執行效率所限制,加上計算依賴的演算法又特別複雜,所以如果用的第三方特別多,就特別容易造成記憶體不足、超時、執行緩慢等問題。
測試基於6個專案進行composerupdate--dry-run得出,可以看到使用了HHVM之後速度從2分14秒提高到了34秒,平均6秒就完成一個專案的composerupdate,可見速度提升是非常大的。
要明白是什麼影響了Composer的執行速度,必須先理解Composer的執行原理。Composer的大致執行步驟如下:
1.分析你的composer.json檔案,找到所有需要安裝的第三方的名稱和對應的版本號
2.2.從本地快取目錄和Packagist伺服器獲取上述的第三方的資訊,包含最新版本,程式碼存放等等
3.3.分析依賴關係,根據包依賴、版本是否有更新等條件計算出最終需要安裝的第三方的清單
4.4.根據這份清單第三方的原始碼,根據引數的不同,方式會是用GitClone專案或者是直接Zip包
5.5.將第三方安裝到本地,一般是安裝在專案下的./vendor目錄,同時根據引數生成用於載入第三方的autoload檔案
分析:從上述步驟中可以看到Composer在執行時會有5個不同的階段,而其中1、2、3、4步都是會因為各種原因導致Composer執行速度緩慢的,類似composer-proxy這樣的Composer映象/代理站其實已經解決了第1、2步驟速度慢的問題,也就是加快從Packagist版本更新定義檔案慢的這一步。而3這一步由於PHP的執行效率所限制,加上計算依賴的演算法又特別複雜,所以如果用的第三方特別多,就特別容易造成記憶體不足、超時、執行緩慢等問題。
測試基於6個專案進行composerupdate--dry-run得出,可以看到使用了HHVM之後速度從2分14秒提高到了34秒,平均6秒就完成一個專案的composerupdate,可見速度提升是非常大的。