为什么php作曲家这么慢?

Agm*_*her 73 php composer-php

为什么当我所做的是创建一个零依赖项目时,作曲家这么慢?以下是我运行的命令:

/vendor

composer init

等3分钟(不夸张).

所有作曲家要做的就是拉动自动加载器并创建init,那么为什么需要这么长时间呢?就此而言,为什么不采取这一步骤/vendor呢?

是否有一个配置选项可用于引入缓存的自动加载器和供应商composer init

小智 315

因为作曲家实现了file_get_contents().没有TCP优化,没有Keep-Alive,没有多路复用......

我创建了一个composer插件来并行下载包.
https://packagist.org/packages/hirak/prestissimo

$ composer global require hirak/prestissimo

请试一试.在我的环境中,composer install变得快10倍.

  • 我不知道为什么这个答案没有像1 000个upvotes ...谢谢你的插件,它是一个救生员,字面意思! (38认同)
  • 自2016年以来,在核心中合并的公关已经开放.不确定为什么他们不会合并它看到它带来的性能差异 (10认同)
  • @AgmLauncher请将此标记为已接受的答案,因为它显着缩短了安装时间 (4认同)
  • 这个包后这么快 (3认同)
  • 确实,这很有帮助 (2认同)
  • 这应该是核心。 (2认同)
  • 好消息:这显然是在2019年1月合并到Composer 2中的:https://github.com/composer/composer/pull/7904 (2认同)

sgr*_*r12 42

  1. 确保您拥有最新版本的Composer.
  2. 例如,通过添加-vvv以详细模式安装 composer global require "squizlabs/php_codesniffer=*" -vvv
  3. 如果你能够找到作曲家面临缓慢的地方,例如我的下载包时会被卡住5分钟.在50 mbps连接上下载20 kb文件花了> 5分钟.这是因为它使用http而不是https从packagist下载包.对配置进行这些更改已解决了我的问题: composer config --global repo.packagist composer https://packagist.org

  • 我是作曲家的新手并尝试解决这个问题2天,在阅读你的评论并添加-vvv后,它终于奏效了.1000票 (2认同)

小智 30

另外,禁用xdebug.即使在运行简单的命令时,Xdebug也可能导致Composer花费几分钟composer --version.

  • 在撰写本文时,无论有没有调试,我都具有相同的性能,因为在 2020/2019 年,composer 在运行时自动禁用了 xdebug,尽管安装 yii2-starter-kit 需要大约 200 秒,所有库都没有xdebug,所以这个回复已经过时了 (3认同)

小智 10

同样在这里.通过"composer install --profile -vvv"获取更多详细信息.在我的情况下,下载一些json文件需要很长时间.它们会缓存在我的服务器上,但仍会在每次编写器更新/安装调用时下载.

...... 30分钟后......

看起来有点性能问题@ packagist.org.现在composer安装在2秒内运行!下载的json文件已正确缓存.


Aar*_*ain 5

我遇到了这个问题,由于没有在计算机上的任何位置安装Xdebug,这使我不知所措。原来是IPv6寻址模式失败。为了测试我跑了

curl --ipv4 'https://packagist.org/packages.json'
curl --ipv6 'https://packagist.org/packages.json'
Run Code Online (Sandbox Code Playgroud)

IPv4通过,但IPv6失败。最后,您应该查看一下为什么您的网络堆栈不支持它,但是就我而言,我决定只对IPv4流量优先,直到我解决了。在CentOS上,我创建/修改了文件/etc/gai.conf并放入以下内容:

label       ::1/128        0
label       ::/0           1
label       2002::/16      2
label       ::/96          3
label       ::ffff:0:0/96  4
precedence  ::1/128        50
precedence  ::/0           40
precedence  2002::/16      30
precedence  ::/96          20
precedence  ::ffff:0:0/96  100
Run Code Online (Sandbox Code Playgroud)

在Ubuntu上,您还可以编辑该文件并取消注释该行

precedence ::ffff:0:0/96  100
Run Code Online (Sandbox Code Playgroud)

来自Rackspace社区中心的信息


Lia*_*ell 5

在 Ubuntu Xenial 16.04 VPS 上,您需要执行以下操作:

sudo sh -c "echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf"
composer global require hirak/prestissimo
Run Code Online (Sandbox Code Playgroud)

它将 IPv4 配置为优先于 IPv6。

https://serverfault.com/questions/93717/setting-ipv4-as-preferred-protocol-over-ipv6

  • 我可以确认这个解决方案甚至适用于 ubuntu 18.04LTS (3认同)