要明白是什么影响了Composer的运行速度,必须先理解Composer的运行原理。Composer的大致运行步骤如下:
1.分析你的composer.json文件,找到所有需要安装的第三方软件的名称和对应的版本号
2.从本地缓存目录和Packagist服务器获取上述的第三方软件的信息,包含最新版本,代码存放地址等等
3.分析依赖关系,根据包依赖、版本是否有更新等条件计算出最终需要安装的第三方软件的清单
4.根据这份清单下载第三方软件的源代码,根据参数的不同,下载方式会是用Git Clone项目或者是直接下载Zip包
5.将第三方软件安装到本地,一般是安装在项目下的./vendor目录,同时根据参数生成用于载入第三方软件的autoload文件
分析:从上述步骤中可以看到Composer在运行时会有5个不同的阶段,而其中1、2、3、4步都是会因为各种原因导致Composer执行速度缓慢的,类似composer-proxy.com这样的Composer镜像/代理站其实已经解决了第1、2步骤速度慢的问题,也就是加快从Packagist下载版本更新定义文件慢的这一步。而3这一步由于PHP的运行效率所限制,加上计算依赖的算法又特别复杂,所以如果用的第三方软件特别多,就特别容易造成内存不足、超时、运行缓慢等问题。
下面我就教给大家如何使用hhvm去运行Composer以提高执行速度的方法
以Ubuntu 14.04系统为例,安装HHVM
wget -O -
http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add -
echo deb
http://dl.hhvm.com/ubuntu trusty main | sudo tee /etc/apt/sources.list.d/hhvm.list
sudo apt-get update
sudo apt-get install hhvm
然后使用hhvm去运行composer
hhvm /usr/local/bin/composer update
注意:如果不想每次都打这么长的命令可以在你的shell配置文件里做一个alias
然后composer就会用hhvm的方式去运行,那至于速度能提高多少呢?我在这里做一个对比:
PHP 5.5.9 with HHVM,Composer version d79f2b0fd33ee9b89f3d9f1969f43dc3d570a33a 2014-09-10 15:11:05
real 0m34.551s
user 0m31.462s
sys 0m2.986s
PHP 5.5.9 without HHVM,Composer version d79f2b0fd33ee9b89f3d9f1969f43dc3d570a33a 2014-09-10 15:11:05
real 2m16.081s
user 2m14.024s
sys 0m1.716s
测试基于6个项目进行composer update --dry-run得出,可以看到使用了HHVM之后速度从2分14秒提高到了34秒,平均6秒就完成一个项目的composer update,可见速度提升是非常大的。
当然本方法也可以适用用于其他类似的跑PHP脚本速度慢的案例上。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/133001
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.