Dlaczego PHP Composer działa tak wolno, skoro wszystko, co robię, to inicjowanie projektu bez zależności? Oto polecenia, które wykonuję:
composer init
<krok przez tworzenie pliku composer.json, zdefiniuj 0 zerowych zależności>
composer install
Poczekaj 3 minuty (bez przesady).
Wszystko, co kompozytor musi zrobić, to wciągnąć autoloader i stworzyć /vendor
, więc dlaczego trwa to tak długo? A skoro o tym mowa, dlaczego ten krok się nie dzieje composer init
?
Czy istnieje opcja konfiguracji, której mogę użyć, aby pobrać buforowany autloader i dostawcę init
?
php
composer-php
AgmLauncher
źródło
źródło
compose install
ponad 5 minut temu i jeszcze się nie skończył.Composer version 1.0-dev (07c644ac229a21df80180598d8bb9aaba232eecb) 2015-02-03 12:51:10
. Może nie jest to najnowsza wersja, ale wciąż nowsza niż twój mainframe IBM ;-)composer self-update
Odpowiedzi:
Wyłącz także Xdebug . Xdebug może spowodować, że Composer potrwa kilka minut, nawet jeśli uruchomisz polecenie tak proste, jak
composer --version
.źródło
Ponieważ Composer jest implementowany przez
file_get_contents()
. To nie ma optymalizacji TCP, nie ma utrzymywania aktywności, nie ma multipleksowania itp.Stworzyłem wtyczkę Composer do równoległego pobierania pakietów: https://packagist.org/packages/hirak/prestissimo
Proszę, spróbuj. W moim środowisku
composer install
staje się 10 razy szybszy.źródło
composer global require "squizlabs/php_codesniffer=*" -vvv
composer config --global repo.packagist composer https://packagist.org
źródło
composer config --global repo.packagist composer https://packagist.org
co to było! Niesamowite! 🏆To samo tutaj. Więcej informacji uzyskasz za pomocą polecenia „composer install --profile -vvv”. W moim przypadku pobranie kilku plików JSON zajmuje dużo czasu. Są zapisywane w pamięci podręcznej na moim serwerze, ale nadal są pobierane przy każdym wywołaniu aktualizacji / instalacji Composera.
... 30 minut później ...
Wygląda na to, że wystąpił problem z wydajnością @ packagist.org. Teraz instalacja Composera przebiega w ciągu 2 sekund! Pobrane pliki JSON są odpowiednio buforowane.
źródło
Miałem do czynienia z tym problemem i rzuciło mnie to na krzywdę, ponieważ nie mam zainstalowanego nigdzie Xdebug na moim komputerze. Okazuje się, że były to awarie trybu adresowania IPv6 . Więc aby przetestować, pobiegłem
curl --ipv4 'https://packagist.org/packages.json' curl --ipv6 'https://packagist.org/packages.json'
IPv4 przeszedł, ale IPv6 zawiódł. W końcu powinieneś sprawdzić, dlaczego twój stos sieciowy go nie obsługuje, ale w moim przypadku zdecydowałem się po prostu dać pierwszeństwo ruchowi IPv4, dopóki nie będę mógł tego rozwiązać. W CentOS utworzyłem / zmodyfikowałem plik /etc/gai.conf i umieściłem w nim:
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
W Ubuntu możesz również edytować ten plik i odkomentować wiersz
precedence ::ffff:0:0/96 100
Źródło w Centrum społeczności Rackspace
źródło
Na Ubuntu Xenial 16.04 VPS musisz wykonać następujące czynności:
sudo sh -c "echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf" composer global require hirak/prestissimo
Konfiguruje IPv4 jako preferowany w stosunku do IPv6.
/server/93717/setting-ipv4-as-preferred-protocol-over-ipv6
źródło
W moim przypadku wersja Composer, którą używałem, była przestarzała. Po zaktualizowaniu samej wersji kompozytora problem zniknął.
Aby zaktualizować wersję kompozytora, uruchom
composer self-update
a następnie wymagaj pakietu kompozytora i gotowe.
composer require "<package-name>"
źródło
permission
problem jest uprzedzeniem.Jeśli którakolwiek z poprzednich odpowiedzi nie działa, sprawdź, czy Twoja zapora zezwala na TCP_OUT na porcie 9418.
Zabezpieczenia mojego firewalla były zbyt ostre. Spowodowało to, że Composer trwał tak długo, że nigdy nie otrzymałem żadnego limitu czasu ani wskazania, że port jest zablokowany.
źródło
Mój był powolny podczas pobierania plików json z powodu programu antywirusowego. Niektóre programy antywirusowe skanują cały ruch sieciowy i mogą wolno analizować pliki json. Spróbuj wyłączyć AV podczas działania programu Composer.
źródło
Edycja: Wniosek: żadne rozwiązanie nie jest tutaj wymienione lub ogólnie nie wydaje się być kuloodporne. Co ostatecznie przyczynia się zwykle za pomocą kompozytora stopniowo, wymagające lub usuwając tylko jeden pakiet naraz używając
composer require
,composer remove
komendy, również tyczy dodawania „specyficzny zakaz zależność” ustawienie, każda biblioteka może być dodany / usunięty przez wzgląd na niego przeredagowywania / odświeżenie konfiguracji pamięci podręcznej blokady composer.json.Grupowanie moich doświadczeń z odpowiedziami z tego miejsca iz podanego linku.
Wcześniej wypróbowałem wszystkie rozwiązania wymienione w tym pytaniu do tej pory. Jednak nadal mi to nie pomogło, chociaż próbowałem / zauważyłem, że instalacja jakiejkolwiek innej pojedynczej biblioteki była znacznie szybka, więc zacząłem badać biblioteki jedna po drugiej, co mogło spowodować wąskie gardło.
1) TAK I znalazłem to jako oszustwo kodowe,
"codeception/codeception": "2.4.0",
Samo zajęło to prawie 200 sekund, chociaż uruchomienie go razem z innymi bibliotekami wydawało się czasami działać prawie 12 minut. Co więcej, kompozytor nie wydaje się odzwierciedlać czasu rzeczywistego, gdy po zainicjowaniu przez 20 sekund wypuszcza go na 0,35 sekundy i tak dalej.
[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]
Bieg przed
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) TAK Przy okazji, prestissimo jak już wspomniałem zostało już zastosowane i wydawało się pomóc, ponieważ na innym bardzo szybkim komputerze, który ma znacznie szybszy internet bez kodekodowania, instalacja zajęła 5 razy więcej, 518 sekund, a być może z powodu prestissimo lub innych porad tutaj zajęło to 110 sekund.
composer global require hirak/prestissimo
3) TAK Windows działa wolno, podobnie jak foldery zwirtualizowane od Windows do Linux. Uruchamianie poza folderem współdzielonym w systemie Linux wydawało się przyspieszać go około dwukrotnie. Chociaż może to być spowodowane pamięcią podręczną.
4) NIE
"process-timeout": 1800,
jest na pojedynczy proces, taki jak git checkout i nie wydawał się wcale pomagać, nawet ustawiony na 10s, ponieważ był już znacznie duży. Może pomaga tylko wtedy, gdy następuje całkowita przerwa w działaniu jakiejś usługi.
5) TAK instalacja z usuniętym lub pustym folderem dostawcy = świeżo wydaje się być znacznie szybsza (około 1 minuty i więcej), niż dodawanie do plików dostawcy i innych istniejących w nim pakietów
6) TAK wydaje się być wolniejsze na Ubuntu18 apache2 bez własnego obrazu xdebug, niż na Debian10 php-fpm, nawet z xdebug na Yii2-starter-kit, z jakiegoś powodu około dwa razy wolniej,
cat /etc/*-release
aby dowiedzieć się o dystrybucji Linuksa7) NIE
php -ddefault_socket_timeout=1 /usr/local/bin/composer --verbose --profile install
wspomniane tutaj NIE wydaje się pomagać Powolne aktualizowanie zależności kompozytora, pomimo flagi --prefer-dist ani wspomnianego protokołu IP v6 v4. Chociaż może to być spowodowane pamięcią podręczną.8) NIE Instalowanie zip nie wydaje się pomagać, instalacja PHP miała preinstalowany zip, nadal narzekał, że nie był tam, dopóki nie został zainstalowany jako pakiety Linux, ale spowolnił proces w pojedynczej symulacji o 100 sekund z 650 do 750 sekund. Te same warunki środowiskowe.
As there is no 'unzip' command installed zip files are being unpacked using the PHP zip extension
https://stackoverflow.com/a/51208804/3419535 testowanie w warunkach bez pamięci podręcznej--no-cache
9) TAK usuń
"minimum-stability ": "dev",
10) TAK, użyj prefer-dist
composer require robmorgan/phinx:@dev --prefer-dist -vvv --profile
(użycie polecenia require jako przykładu, ponieważ użycie częściowych poleceń wymagania, jak wspomniano powyżej, zamiast pełnej instalacji za pomocą polecenia instalacji, wydaje się być jednym z najbardziej znaczących przyspieszeń, a ponadto wymaga @ dev- podobnie jak w poprzednich punktach, gdyminimum-stability: dev
nie jest stosowane generalnie do wszystkich zależności, wydaje się być nieszkodliwe przy użyciu na podstawie przypadku (zależności))źródło
krok 1
$ composer self-update
krok 2
krok 3
źródło
Najlepszym sposobem, aby się tego dowiedzieć, jest uruchomienie aktualizacji / instalacji kompozytora z szczegółowością. composer {install / update} -vvv. Użycie flagi -h może ci pomóc w przyszłości
źródło
W przypadku, jeśli usunąłeś swój plik composer.lock, a następnie odszedł
composer install
, staje się zbyt wolny, aby pobrać zależności. Jeśli tak jest, użyjcomposer update
polecenia, a wtedy może pomóc tobie lub innym.źródło