V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
scourgen
V2EX  ›  PHP

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

  •  
  •   scourgen · 2014-09-12 03:21:15 +08:00 · 11484 次点击
    这是一个创建于 3729 天前的主题,其中的信息可能已经有所发展或是发生改变。
    要明白是什么影响了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'
    solupro
        5
    solupro  
       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   ·   实用小工具   ·   5437 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 07:30 · PVG 15:30 · LAX 23:30 · JFK 02:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.