小技巧:如何使 Composer 跑得更快 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
scourgen
V2EX    PHP

小技巧:如何使 Composer 跑得更快

  •  
  •   scourgen 2014-09-12 03:21:15 +08:00 11875 次点击
    这是一个创建于 4097 天前的主题,其中的信息可能已经有所发展或是发生改变。
    要明白是什么影响了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脚本速度慢的案例上。
    11 条回复    2017-05-23 19:01:28 +08:00
    typcn
        1
    typcn  
       2014-09-12 05:09:14 +08:00
    PHP那些拓展可以支持HHVM么
    nevernet
        2
    nevernet  
       2014-09-12 08:52:07 +08:00
    换个源嘛
    WildCat
        3
    WildCat  
       2014-09-12 09:12:34 +08:00 via iPhone
    @typcn 仅支持少部分常用的
    yangg
        4
    yangg  
       2014-09-12 09:36:15 +08:00
    这个域名是被q了,还是dns有问题?
    Couldn't resolve host 'hhvm.com'
    solu
        5
    solu  
       2014-09-12 09:40:47 +08:00
    这头像很熟悉呀,默默的去翻了一下PHPCONCHINA的ppt
    jjdd
        6
    jjdd  
       2014-09-12 10:18:34 +08:00
    不是有国内镜像吗: http://phphub.org/topics/57
    scourgen
        7
    scourgen  
    OP
       2014-09-12 10:34:46 +08:00
    @jjdd 镜像是解决“查看有没有新的版本”这个步骤慢的问题,hhvm是加速composer本身计算依赖时的速度,可以说是两个不同的步骤,互不影响。
    cdffh
        8
    cdffh  
       2014-09-12 13:05:34 +08:00
    cool
    kankana
        9
    kankana  
       2014-09-17 10:49:30 +08:00
    composer终于有国内镜像了,内流满面~~ 谢谢楼主!!!
    heaventear
        10
    heaventear  
       2017-04-01 17:30:24 +08:00
    不用这么麻烦,原因是国内网络问题,用镜像其实不是好方案,因为更新不及时。一劳永逸的方法是挂梯子,上加速器。我用的是天路加速器,他们官网的命令行加速教程写的比较清楚,教程这里 https://91tianlu.com/knowledgebase.php?action=displayarticle&id=7
    heaventear
        11
    heaventear  
       2017-05-23 19:01:28 +08:00
    不用这么麻烦,原因是国内网络问题,用镜像其实不是好方案,因为更新不及时。 ,教程这里 https://91tianlu.cn/knowledgebase.php?action=displayarticle&id=7
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2788 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 14:06 PVG 22:06 LAX 06:06 JFK 09:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86