为什么php作曲家这么慢?

时间:2015-02-10 16:05:48

标签: php composer-php

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

composer init

composer install

等待3分钟(不夸张)。

所有作曲家必须做的是拉入自动加载器并创建/vendor,那么为什么需要这么长时间呢?就此而言,为什么不在composer init上发生这一步?

我是否可以使用配置选项在init上引入缓存的自动加载程序和供应商?

14 个答案:

答案 0 :(得分:269)

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

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

$ composer global require hirak/prestissimo

请试一试。在我的环境中,composer install的速度提高了10倍。

答案 1 :(得分:36)

  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 :(得分:26)

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

答案 3 :(得分:8)

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

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

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

答案 4 :(得分:3)

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

curl --ipv4 'https://packagist.org/packages.json'
curl --ipv6 'https://packagist.org/packages.json'

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

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

precedence ::ffff:0:0/96  100

Source on Rackspace Community Hub

答案 5 :(得分:1)

就我而言,我运行的作曲者版本是过时的。 在更新了作曲者的版本本身之后,问题就消失了。

要更新作曲者的版本,请运行

composer self-update

然后需要composer程序包就可以了。

composer require "<package-name>"

答案 6 :(得分:0)

如果上述任何一个答案都不起作用,请检查您的防火墙是否允许在端口9418上使用TCP_OUT。我的防火墙安全性太强了。这导致作曲家花了这么长时间,我从未得到任何超时或指示端口被阻止。希望它有所帮助!

答案 7 :(得分:0)

编辑:结论:此处没有列出解决方案,或者通常没有防弹方案。 最终有帮助的通常是逐步使用composer,使用composer requirecomposer remove命令一次只需要删除一个软件包,或者考虑添加任何“非依赖特定”设置,可以添加任何库。 / removed是为了更新/刷新composer.json锁缓存配置。

将我的经验与此处以及相关链接的答案分组。

在此之前,我尝试过此问题中提到的每个解决方案。但是,它仍然没有帮助我,尽管我尝试/注意到安装任何其他单个库的速度都相当快,所以我继续逐个研究可能导致瓶颈的库。

1)是,我将其定位为代码接收"codeception/codeception": "2.4.0",

仅花费了将近200秒,尽管有时将它与其他库一起运行将近12分钟。此外,在启动20秒后,作曲家似乎并没有实时反映出它的运行时间,其输出为0.35s,以此类推。

[374.9MiB/173.14s]     39/45:   https://codeload.github.com/sebastianbergmann/php-text-template/legacy.zip/31f8b717e51d9a2afca6c9f046f5d69fc27c8686
[374.9MiB/173.16s]     40/45:   https://codeload.github.com/sebastianbergmann/diff/legacy.zip/720fcc7e9b5cf384ea68d9d930d480907a0c1a29
[374.9MiB/173.17s]     41/45:   https://codeload.github.com/sebastianbergmann/exporter/legacy.zip/68609e1261d215ea5b21b7987539cbfbe156ec3e
[374.9MiB/173.19s]     42/45:   https://codeload.github.com/sebastianbergmann/phpunit-mock-objects/legacy.zip/f9756fd4f43f014cb2dca98deeaaa8ce5500a36e
[374.9MiB/173.20s]     43/45:   https://codeload.github.com/sebastianbergmann/recursion-context/legacy.zip/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8
[374.9MiB/173.23s]     44/45:   https://codeload.github.com/sebastianbergmann/php-code-coverage/legacy.zip/4cab20a326d14de7575a8e235c70d879b569a57a
[374.9MiB/173.24s]     45/45:   https://codeload.github.com/doctrine/instantiator/legacy.zip/ae466f726242e637cebdd526a7d991b9433bacf1
[374.9MiB/173.24s]     Finished: success: 45, skipped: 0, failure: 0, total: 45
[374.8MiB/173.25s] Analyzed 6622 packages to resolve dependencies
[374.8MiB/173.25s] Analyzed 435842 rules to resolve dependencies
[374.8MiB/173.25s] Package operations: 54 installs, 0 updates, 0 removals
[374.8MiB/173.26s] Installs: sebastian/recursion-context:3.0.0, sebastian/exporter:3.1.2, doctrine/instantiator:1.3.0, phpunit/php-text-template:1.2.1, phpunit/phpunit-mock-objects:6.1.2, codeception/stub:1.0.4, sebastian/diff:3.0.2, sebastian/comparator:3.0.2, theseer/tokenizer:1.1.3, sebastian/version:2.0.1, sebastian/environment:3.1.0, sebastian/code-unit-reverse-lookup:1.0.1, phpunit/php-token-stream:3.1.1, phpunit/php-file-iterator:1.4.5, phpunit/php-code-coverage:6.0.5, sebastian/object-reflector:1.1.1, sebastian/object-enumerator:3.0.3, sebastian/global-state:2.0.0, phpunit/php-timer:2.1.2, symfony/polyfill-ctype:v1.17.0, webmozart/assert:1.8.0, phpdocumentor/reflection-common:2.1.0, phpdocumentor/type-resolver:1.1.0, phpdocumentor/reflection-docblock:5.1.0, phpspec/prophecy:v1.10.3, myclabs/deep-copy:1.9.5, sebastian/resource-operations:1.0.0, phar-io/version:1.0.1, phar-io/manifest:1.0.1, phpunit/phpunit:7.1.5, codeception/phpunit-wrapper:7.6.1, symfony/yaml:v4.4.8, behat/gherkin:v4.6.2, symfony/polyfill-mbstring:v1.17.0, symfony/dom-crawler:v4.4.8, symfony/css-selector:v4.4.8, symfony/browser-kit:v4.4.8, symfony/event-dispatcher-contracts:v1.1.7, psr/container:1.0.0, symfony/event-dispatcher:v4.4.8, symfony/service-contracts:v2.0.1, symfony/polyfill-php73:v1.17.0, symfony/console:v4.4.8, symfony/finder:v4.4.8, ralouphie/getallheaders:3.0.3, psr/http-message:1.0.1, guzzlehttp/psr7:1.6.1, guzzlehttp/promises:v1.3.1, symfony/polyfill-php72:v1.17.0, symfony/polyfill-intl-idn:v1.17.0, guzzlehttp/guzzle:6.5.3, symfony/process:v4.4.8, facebook/webdriver:1.7.1, codeception/codeception:2.4.0
[374.8MiB/173.28s]   - Installing sebastian/recursion-context (3.0.0): [374.9MiB/173.28s] Loading from cache[374.9MiB/173.28s]
[374.9MiB/173.28s]  Extracting archive[374.9MiB/173.51s]   - Installing sebastian/exporter (3.1.2): [374.9MiB/173.52s] Loading from cache[374.9MiB/173.52s]
[374.9MiB/173.52s]  Extracting archive[374.9MiB/173.75s]   - Installing doctrine/instantiator (1.3.0): [374.9MiB/173.76s] Loading from cache[374.9MiB/173.76s]
[374.9MiB/173.76s]  Extracting archive[374.9MiB/174.00s]   - Installing phpunit/php-text-template (1.2.1): [374.9MiB/174.00s] Loading from cache[374.9MiB/174.00s]
[374.9MiB/174.00s]  Extracting archive[374.9MiB/174.23s]   - Installing phpunit/phpunit-mock-objects (6.1.2): [374.9MiB/174.23s] Loading from cache[374.9MiB/174.23s]
[374.9MiB/174.23s]  Extracting archive[374.9MiB/174.55s]   - Installing codeception/stub (1.0.4): [374.9MiB/174.56s] Loading from cache[374.9MiB/174.56s]
[374.9MiB/174.56s]  Extracting archive[374.9MiB/174.80s]   - Installing sebastian/diff (3.0.2): [374.9MiB/174.80s] Loading from cache[374.9MiB/174.80s]
[374.9MiB/174.80s]  Extracting archive[374.9MiB/175.07s]   - Installing sebastian/comparator (3.0.2): [374.9MiB/175.07s] Loading from cache[374.9MiB/175.07s]
[374.9MiB/175.07s]  Extracting archive[374.9MiB/175.33s]   - Installing theseer/tokenizer (1.1.3): [374.9MiB/175.33s] Loading from cache[374.9MiB/175.33s]

之前的跑步

 Problem 1
    - Installation request for codeception/codeception 2.4.0 -> satisfiable by codeception/codeception[2.4.0].
    - Conclusion: remove symfony/finder v5.0.8
    - Conclusion: don't install symfony/finder v5.0.8
    - codeception/codeception 2.4.0 requires symfony/finder >=2.7 <5.0 -> satisfiable by symfony/finder[v2.7.0, v2.7.1, v2.7.10, v2.7.11, v2.7.12, v2.7.13, v2.7.14, v2.7.15, v2.7.16, v2.7.17, v2.7.18, v2.7.19, v2.7.2, v2.7.20, v2.7.21, v2.7.22, v2.7.23, v2.7.24, v2.7.25, v2.7.26, v2.7.27, v2.7.28, v2.7.29, v2.7.3, v2.7.30, v2.7.31, v2.7.32, v2.7.33, v2.7.34, v2.7.35, v2.7.36, v2.7.37, v2.7.38, v2.7.39, v2.7.4, v2.7.40, v2.7.41, v2.7.42, v2.7.43, v2.7.44, v2.7.45, v2.7.46, v2.7.47, v2.7.48, v2.7.49, v2.7.5, v2.7.50, v2.7.51, v2.7.6, v2.7.7, v2.7.8, v2.7.9, v2.8.0, v2.8.1, v2.8.10, v2.8.11, v2.8.12, v2.8.13, v2.8.14, v2.8.15, v2.8.16, v2.8.17, v2.8.18, v2.8.19, v2.8.2, v2.8.20, v2.8.21, v2.8.22, v2.8.23, v2.8.24, v2.8.25, v2.8.26, v2.8.27, v2.8.28, v2.8.29, v2.8.3, v2.8.30, v2.8.31, v2.8.32, v2.8.33, v2.8.34, v2.8.35, v2.8.36, v2.8.37, v2.8.38, v2.8.39, v2.8.4, v2.8.40, v2.8.41, v2.8.42, v2.8.43, v2.8.44, v2.8.45, v2.8.46, v2.8.47, v2.8.48, v2.8.49, v2.8.5, v2.8.50, v2.8.52, v2.8.6, v2.8.7, v2.8.8, v2.8.9, v3.0.0, v3.0.1, v3.0.2, v3.0.3, v3.0.4, v3.0.5, v3.0.6, v3.0.7, v3.0.8, v3.0.9, v3.1.0, v3.1.1, v3.1.10, v3.1.2, v3.1.3, v3.1.4, v3.1.5, v3.1.6, v3.1.7, v3.1.8, v3.1.9, v3.2.0, v3.2.1, v3.2.10, v3.2.11, v3.2.12, v3.2.13, v3.2.14, v3.2.2, v3.2.3, v3.2.4, v3.2.5, v3.2.6, v3.2.7, v3.2.8, v3.2.9, v3.3.0, v3.3.1, v3.3.10, v3.3.11, v3.3.12, v3.3.13, v3.3.14, v3.3.15, v3.3.16, v3.3.17, v3.3.18, v3.3.2, v3.3.3, v3.3.4, v3.3.5, v3.3.6, v3.3.7, v3.3.8, v3.3.9, v3.4.0, v3.4.1, v3.4.10, v3.4.11, v3.4.12, v3.4.13, v3.4.14, v3.4.15, v3.4.16, v3.4.17, v3.4.18, v3.4.19, v3.4.2, v3.4.20, v3.4.21, v3.4.22, v3.4.23, v3.4.24, v3.4.25, v3.4.26, v3.4.27, v3.4.28, v3.4.29, v3.4.3, v3.4.30, v3.4.31, v3.4.32, v3.4.33, v3.4.34, v3.4.35, v3.4.36, v3.4.37, v3.4.38, v3.4.39, v3.4.4, v3.4.40, v3.4.5, v3.4.6, v3.4.7, v3.4.8, v3.4.9, v4.0.0, v4.0.1, v4.0.10, v4.0.11, v4.0.12, v4.0.13, v4.0.14, v4.0.15, v4.0.2, v4.0.3, v4.0.4, v4.0.5, v4.0.6, v4.0.7, v4.0.8, v4.0.9, v4.1.0, v4.1.1, v4.1.10, v4.1.11, v4.1.12, v4.1.2, v4.1.3, v4.1.4, v4.1.5, v4.1.6, v4.1.7, v4.1.8, v4.1.9, v4.2.0, v4.2.1, v4.2.10, v4.2.11, v4.2.12, v4.2.2, v4.2.3, v4.2.4, v4.2.5, v4.2.6, v4.2.7, v4.2.8, v4.2.9, v4.3.0, v4.3.1, v4.3.10, v4.3.11, v4.3.2, v4.3.3, v4.3.4, v4.3.5, v4.3.6, v4.3.7, v4.3.8, v4.3.9, v4.4.0, v4.4.1, v4.4.2, v4.4.3, v4.4.4, v4.4.5, v4.4.6, v4.4.7, v4.4.8].
    - Can only install one of: symfony/finder[v2.7.0, v5.0.8].
    - Can only install one of: symfony/finder[v2.7.1, v5.0.8].
    - Can only install one of: symfony/finder[v2.7.10, v5.0.8].
    - Can only install one of: symfony/finder[v2.7.11, v5.0.8].

2)是顺便说一句,我提到的prestissimo已被应用,并且似乎有所帮助,因为在另一台非常快的计算机上,它的互联网完全快得多,而且没有代码接收,所以安装花费了5倍,即518秒,虽然可能是由于prestissimo或此处的其他建议,却花了110秒。

composer global require hirak/prestissimo

3)是 Windows运行缓慢,从Windows到Linux的虚拟文件夹也是如此。 在Linux内的共享文件夹之外运行似乎可以使其速度提高大约两倍。 虽然可能是由于缓存。

4)否

    "process-timeout": 1800,

是像git checkout这样的单个进程,并且似乎没有任何帮助,甚至设置为10s,因为它已经相当大了。仅当某些服务完全中断时,它才有帮助。

5)是是,将供应商文件夹删除或清空=空安装似乎比添加到供应商文件和其他现有软件包中要快得多(大约1分钟或更长时间)

6)是似乎在没有xdebug自己映像的Ubuntu18 apache2上比在Debian10 php-fpm上甚至在Yii2-starter-kit上带有xdebug的情况下都要慢,出于某种原因,速度要慢两倍,{{ 1}}找出Linux发行版

7)否 这里提到的cat /etc/*-release似乎没有帮助 Slow updating of composer dependencies, despite --prefer-dist flag 也没有提到IP v6 v v4协议 虽然可能是由于缓存。

8)否安装zip似乎无济于事,PHP安装中已经预装了zip,但它仍然抱怨直到安装为Linux软件包后才出现,但这样会使单次模拟的过程变慢650至750秒的100秒。相同的环境条件。 php -ddefault_socket_timeout=1 /usr/local/bin/composer --verbose --profile install https://stackoverflow.com/a/51208804/3419535 在无缓存条件下进行测试As there is no 'unzip' command installed zip files are being unpacked using the PHP zip extension

9)是删除--no-cache

10)是使用preferred-dist "minimum-stability ": "dev",(以一个require命令为例,就像上面首先提到的那样使用部分require命令,而不是通过安装来进行完整安装命令,这似乎是最重要的提速方法之一,另外,当composer require robmorgan/phinx:@dev --prefer-dist -vvv --profile未普遍适用于所有依赖项时,按每个案例(依赖项)使用时似乎无害),加上前面的要求,要求@ dev-

>

答案 8 :(得分:0)

由于防病毒功能,我在下载json文件时速度很慢。一些防病毒软件会扫描所有网络流量,分析json文件的速度可能会很慢。尝试在运行作曲家时禁用AV。

答案 9 :(得分:0)

第1步

$ composer self-update

第2步

$ composer clear-cache

第3步

$ composer update

答案 10 :(得分:0)

我找到了另一个可能的解决方案,问题是您的环境中缺少 cUrl 扩展。所以请按照以下步骤操作

  1. 首先,检查您是否有权访问

    packagist.orgping packagist.org。如果您收到服务器的回复,您就可以进行下一步了.

  2. 检查 composer diagnose 是否存在 cUrl 扩展名,对我来说,我得到了这些结果,表明我没有 cUrl 扩展名,因此它可能会降低下载过程中的性能 enter image description here

  3. 根据您环境的 php 版本安装 curl,我的是 8,所以 sudo apt-get install php8.0-curl 对我有用

  4. 安装 cUrl 后,请检查是否再次安装了 composer diagnose,我得到了这些结果,描述了 cUrl 版本。 enter image description here

  5. 这解决了我的 Composer 在安装软件包时变慢的问题。

答案 11 :(得分:-1)

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

sudo sh -c "echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf"
composer global require hirak/prestissimo

答案 12 :(得分:-1)

找出最佳方法是运行composer更新/安装。作曲家{安装/更新} -vvv。使用标志-h将来可能会对您有所帮助

答案 13 :(得分:-1)

以防万一,如果您删除了composer.lock文件,然后删除了composer install,则下载依赖项的速度太慢了。 在这种情况下,请使用composer update命令,它可能会对您或其他人有所帮助。