为什么在作曲家中更新依赖项是如此缓慢?


67

我正在使用composer(http://getcomposer.org/)管理Symfony2(symfony v 2.1.3)中已安装的捆绑软件。作曲者的版本为de3188c

我有一个问题,当我将新的包添加到composer.json并执行它时,显示有关更新依赖项以及接下来将它们全部下载的消息的时间非常短。

我在composer.json中有此数据(见下文),执行时间约为20分钟!!!互联网连接速度足够快,我可以非常快地下载大文件...

有什么技巧可以使其更快?

{
"name": "symfony/framework-standard-edition",
"description": "The \"Symfony Standard Edition\" distribution",
"autoload": {
    "psr-0": { "": "src/" }
},
"require": {
    "php": ">=5.3.3",
    "symfony/symfony": "2.1.*",
    "doctrine/orm": ">=2.2.3,<2.4-dev",
    "doctrine/doctrine-bundle": "1.0.*",
    "twig/extensions": "1.0.*",
    "symfony/assetic-bundle": "2.1.*",
    "symfony/swiftmailer-bundle": "2.1.*",
    "symfony/monolog-bundle": "2.1.*",
    "sensio/distribution-bundle": "2.1.*",
    "sensio/framework-extra-bundle": "2.1.*",
    "sensio/generator-bundle": "2.1.*",
    "jms/security-extra-bundle": "1.2.*",
    "jms/di-extra-bundle": "1.1.*",
    "doctrine/doctrine-fixtures-bundle": "dev-master",
    "webignition/doctrine-migrations-bundle": "dev-master"
},
"scripts": {
    "post-install-cmd": [
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
    ],
    "post-update-cmd": [
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
        "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
    ]
},
"minimum-stability": "dev",
"extra": {
    "symfony-app-dir": "app",
    "symfony-web-dir": "web"
}

1
您可以做的-指定所需的标签(而不是2.1。*使用2.1.1 fe)
Vitalii Zurian 2012年

在2014年12月上旬,发现优化已停止在Composer运行期间尝试垃圾回收内存。由于Composer所做的某些非常具体的事情,它花费了很长时间,但最终却很少。补丁发布后,许多人报告Composer将占用更多内存,但运行时间减少了一半甚至更少。
Alister Bulman 2014年

同时尝试更新作曲家。
Batandwa

Answers:


78

尝试在composer.json中为每个依赖项指定一个版本,并--prefer-dist在调用composer时使用该选项。它将从存储库(如果有)中下载ZIP文件,而不是单个文件。

php composer.phar install --prefer-dist

它大大缩短了我非常简单的项目的加载时间,该项目具有很多可传递的依赖项(使用phpunit)
Benoit

它还在〜/ .composer中保留了一个sit的副本,因此其他项目或更新等将首先在此进行。
克里斯·塞德迈尔

似乎正是我的问题。当我只运行composer安装而没有锁定文件时,它花费了30分钟左右..当我使用锁定文件时,它在几秒钟内完成了。
本杰明

23

既然您接受了答案,就可以解决您的问题。万一其他人偶然发现了这个问题(就像我搜索时一样),就我而言,一个非常慢的Composer安装与我的PHP版本有关(警告,我是一个完整而完全的Composer新手) ,即使Composer进行了标准检查并说一切都很好。我运行Ubuntu 12.04 LTS,并且懒得从Precise存储库中的默认PHP 5.3.10(您正在运行的相同版本)升级。

通过Composer安装Twig最初花费了我大约30分钟。我花了一个多小时才放弃安装Doctrine。我升级到5.4.17(使用此PPA https://launchpad.net/~ondrej/+archive/php5),安装Doctrine的过程仅用了几秒钟。


+1而不考虑PHP升级不是一个选项,因为接受的答案对我也不起作用。
tishma 2014年

在PHP 5.5.9中也可以更快地工作。我听说人们在HHVM上使用composer也获得了惊人的结果。
carbontwelve 2014年

1
也禁用xdebug似乎有帮助。
Alexandru Guzinschi 2014年

15

我发现它也很慢,几十分钟就慢了。

对我来说,我-vvv发现它挂在诸如 Downloading https://packagist.org/p/provider-active$53cdf887c8d2925b3501f47d6980fb7bda2310716369bf7a84857c6e62bbab0f.json

然后,我进入浏览器并尝试下载该JSON文件,而且确实足够。造成速度缓慢的原因是packagist.org。


这是我的情况下速度缓慢的根本原因。
路易(Louis)

这似乎对我
有用

14

就我而言,上述建议没有任何作用。使用该HTTPS协议的目的是packagist

php composer.phar config --global repo.packagist composer https://packagist.org

要么

composer config --global repo.packagist composer https://packagist.org

取决于您的设置


3
这对我来说非常有效。亲自将其标记为最佳答案。
圣狼

1
为我完美地工作
chadpeppers 16/09/23

1
我已经尝试了许多解决方案(例如禁用xdebug,激活缓存,添加--prefer-dist),但都无济于事,偶然地我得到了这个答案,这是唯一真正解决问题的解决方案。应该标记为我的情况的最佳答案。
艾哈迈德·科利

0

为了诊断这种用法,我使用了带有-vvv属性的require命令。

composer require larapack/dd -vvv

以我为例,我发现作曲家的速度慢是由于fxp / composer-asset-plugin。

composer global show
composer global remove fxp/composer-asset-plugin

和瞧

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.