尽管有--prefer-dist标志,但更新作曲者依赖项的速度很慢


73

为什么即使没有更改,我的作曲家依赖关系最多也要花两分钟来更新?

一个流行的建议是添加--prefer-dist标志:

php composer.phar update --prefer-dist

但这对我的情况没有影响。以下是我的composer.json文件-我缺少明显的东西吗?

{
    "name": "my-namespace/symfony",
    "type": "project",
    "description": "",
    "require": {
        "php": ">=5.3.3",
        "symfony/symfony": "2.3.*",
        "doctrine/orm": ">=2.2.3,<2.4-dev",
        "doctrine/doctrine-bundle": "1.2.*",
        "twig/extensions": "1.0.*",
        "symfony/assetic-bundle": "2.3.*",
        "symfony/monolog-bundle": "2.3.*",
        "sensio/framework-extra-bundle": "2.3.*",
        "sensio/generator-bundle": "2.3.*",
        "sensio/distribution-bundle": "2.2.*",
        "my-namespace/my-bundle": "1.0.*"
    },
   "repositories": [
        {
            "type": "vcs",
            "url": "http://username:password@git.com/my-bundle.git"
        }
    ],    
    "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"
        ]
    },
    "config": {
        "bin-dir": "bin"
    },
    "minimum-stability": "dev",
    "extra": {
        "symfony-app-dir": "app",
        "symfony-web-dir": "web",
        "branch-alias": {
            "dev-master": "2.3-dev"
        }
    }
}

2
您是否尝试-vvv --profile按照我的答案中的建议运行命令?什么操作需要这么长时间?您是否在php-cli中启用了xdebug?
NicolaiFröhlich2013年

Answers:


114

此问题通常与在您的CLI环境中加载xdebug有关。(是否启用xdebug都没有关系。)

您可以使用followinc命令之一检查是否启用了xdebug。

// Unix
php -m | grep xdebug
// Windows
php -m | findstr xdebug

通过启用最大程度的详细信息和配置信息,可以获得有关长时间执行哪些操作的更多信息。(如果要更新软件包,更新替换安装。)

composer install --prefer-dist -vvv --profile

36
我没有在PHP中安装xdebug,并且composer运行得非常慢。
古斯塔沃·斯特劳布

2
使用PHP 5.3.10时,来自symfony的composer.json中的快速连接,6核,ssd驱动器,充足的内存和4个额外的“ require”composer update从58秒减少到46秒。:/
bksunday

这不是Bower(由Twitter支持)或npm(由Joyent支持)的问题,因此我怀疑这是Composer服务器负载问题。
Michael J. Calkins 2014年

1
使用PHPUnit创建代码覆盖率统计信息时,需要命令行上的XDebug。
斯文

1
到底在--prefer-dist做什么?
crmpicco

28

可能会使Composer变慢的因素:

  • 如前所述,xdebug会影响Composer的性能。跑步composer diagnose也会对此发出警告。

  • 运行update而不是install。人们常常只是update不断地奔跑。这使Composer经历了整个依赖关系解决过程,无论是否进行了任何更改。运行时install,Composer直接从您的.lock文件获取需求,而跳过依赖关系解析过程。您应该只update在应用程序的开发生命周期内运行。即使这样,它也不必每天通常运行。

  • 如果您具有自己经常更新的特定依赖项,则可以尝试通过运行composer update vendor/package --with-dependencies来简化过程。

  • 设定minimum-stabilitydev。这极大地扩展了依赖解析器必须考虑的可能性。除非绝对没有其他选择minimum-stabilitydev否则您几乎绝不应降低到。查看替代方法,例如临时使用内联@dev标志。


1
您的使用建议install解决了我的问题。谢谢 !
realtebo

5

看来问题已解决,但这可能会对某人有所帮助。

每当我运行composer安装或更新时,花了10秒钟以上的时间便获取了https://packagist.org/packages.json文件。最终,我发现问题与IPv6有关,因为从IPv4站点获取文件的时间不到一秒钟。
问题是我的ISP不支持IPv6,但是我在以太网属性中启用了它。取消Internet Protocol Version 6 (TCP/IPv6)网络设置后,安装/更新速度大大提高(从200多秒降低到10秒)


2
对于此问题,我找到的最佳答案是为php命令添加别名,并将套接字超时设置为可笑的值。alias php="php -d default_socket_timeout=1 -d xdebug.remote_enable=0"
亚历克斯·巴克

@AlexBarker感谢您的建议,但是只是注意,在我的情况下似乎没有帮助,-ddefault_socket_timeout = 10结果,308秒,-ddefault_socket_timeout = 100结果309秒,也没有IP v6和v4协议
FantomX1,20年

3

您正在使用私有存储库。这将不允许下载包含的版本的压缩版本,但是必须克隆存储库。此外,可能必须对整个存储库进行扫描以找到所需的版本。

您应该检查是否可以使用Satis。这样,您可以准备自己的软件的ZIP并下载它,就像Github上托管的东西一样(该文件具有API,Composer使用该API允许下载ZIP,即使未明确准备也是如此)。


3

在内存不足的VM上运行Symfony2时遇到此问题。我增加了机器的内存,并大大改善了它。您可以检查系统上的内存,看看是否可以升级。


这是使用默认的Vagrant's Memory 384mb,将其增加到1gb就足够了,原来作曲家的峰值是456mb
Aren

2

我也遇到了同样的问题composer update,我使用将该作曲家本身更新为最新版本composer selfupdate,现在它的速度可以接受了。


0

实际上,xdebug肯定会减慢速度。不过,卸载xdebug并不理想。一个不错的选择是使用HHVM并将其置于作曲家的职责上。

安装HHVM非常轻松,并且HHVM本身比PHP5快得多。这是双赢-YMMV,但是即使xdebug不在照片中,我在作曲家的使用中也获得了将近5倍的速度提升(诚然在眼球测功机上)。

如果您使用的是OS X,则此链接可能会有所帮助(有关此事的博客文章):

http://circlical.com/blog/2015/11/11/slow-composer-on-os-x


0

检查zipunzip是否已安装。如果缺少它们,Composer将克隆存储库,而不是下载压缩版本。


谢谢,这似乎合乎逻辑,因为作曲家也抱怨As there is no 'unzip' command installed zip files are being unpacked using the PHP zip extension.说,在安装了zip库的情况下运行它,过程和条件相同-这是750秒,没有库650秒,只是一个模拟。此外,除了我的安装中没有独立安装php-zip之外,还没有安装Linux zip,unzip软件包,但是作曲家仍然抱怨说,直到作为Linux库安装了它。
FantomX1年

0

经过数周缓慢的作曲家更新和作曲家要求后,我的解决方案使用Laravel的WINDOWS 10 x 64位WAMP用户

您使用需要一个叫做cacert.pem的东西

https://curl.haxx.se/docs/caextract.html

然后将该文件粘贴到您的wamp主目录C:\ wamp64 \ cacert.pem

然后在搜索选项卡中搜索php.ini,在sublime或任何文本编辑器上打开所有具有该名称的文件

找到名为curl.cainfo和openssl.cafile的行

将您的路径输入此文件-请参阅我的案例示例:

curl.cainfo="C:\wamp64\cacert.pem"

openssl.cafile="C:\wamp64\cacert.pem"

在所有文件中搜索过的所有php.ini文件中执行此操作!

OKAY RESTART SERVER对我有用,希望对您有帮助,我希望以前有人对此发表评论!所以我不会花2周的时间修好它

也叫

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

这也使https上的连接也运行

composer install --prefer-dist -vvv --profile

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.