[php] PHP Composer가 왜 그렇게 느린가요?

종속성이없는 프로젝트를 초기화하기 만하면 PHP Composer 가 느린 이유는 무엇 입니까? 내가 실행하는 명령은 다음과 같습니다.

composer init

<composer.json 생성 단계, 0 0 종속성 정의>

composer install

3 분 동안 기다립니다 (과장 아님).

작곡가가해야 할 일은 오토로더를 /vendor가져 와서를 만드는 것인데 , 왜 그렇게 오래 걸리나요? 그 문제에 대해 왜 그 단계가 일어나지 composer init않습니까?

캐시 된 autloader 및 공급 업체를 가져 오는 데 사용할 수있는 구성 옵션이 init있습니까?



답변

또한 Xdebug를 비활성화하십시오 . Xdebug는 .NET Framework와 같이 간단한 명령을 실행할 때도 Composer에 몇 분 정도 걸릴 수 있습니다 composer --version.


답변

Composer는 file_get_contents(). TCP 최적화, Keep-Alive, 멀티플렉싱 등이 없습니다.

패키지를 병렬로 다운로드하기 위해 Composer 플러그인을 만들었습니다 : https://packagist.org/packages/hirak/prestissimo

$ composer global에는 hirak / prestissimo가 필요합니다.

시도해주세요. 내 환경에서는 composer install10 배 빨라집니다.


답변

  1. 최신 버전의 Composer가 있는지 확인하십시오.
  2. 예를 들어 -vvv를 추가하여 상세 모드로 설치합니다. composer global require "squizlabs/php_codesniffer=*" -vvv
  3. 예를 들어 Composer가 느려진 곳을 찾을 수 있다면 패키지를 다운로드 할 때 5 분 동안 멈췄습니다. 50Mbit / s 연결에서 20kB 파일을 다운로드하는 데 5 분 이상 걸렸습니다. 이는 HTTPS가 아닌 HTTP를 사용하여 packagist에서 패키지를 다운로드했기 때문입니다. 구성을 변경하여 문제가 해결되었습니다.
    composer config --global repo.packagist composer https://packagist.org


답변

여기도 마찬가지입니다. “composer install –profile -vvv”에서 자세한 내용을 확인하십시오. 제 경우에는 몇 개의 JSON 파일을 다운로드하는 데 오랜 시간이 걸립니다. 내 서버에 캐시되지만 Composer 업데이트 / 설치 호출마다 계속 다운로드됩니다.

… 30 분 후 …

@ packagist.org의 성능 문제처럼 보입니다. 이제 Composer 설치가 2 초 이내에 실행됩니다! 그리고 다운로드 한 JSON 파일은 제대로 캐시됩니다.


답변

나는이 문제에 직면하고 있었고 내 컴퓨터에 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

Rackspace Community Hub의 소스


답변

Ubuntu Xenial 16.04 VPS에서 다음을 수행해야합니다.

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

IPv6보다 IPv4를 기본으로 구성합니다.

/server/93717/setting-ipv4-as-preferred-protocol-over-ipv6


답변

제 경우에는 제가 실행하던 작곡가 버전이 이전 버전이었습니다. 작곡가 버전 자체를 업데이트 한 후 문제가 사라졌습니다.

작성기 버전을 업데이트하려면 다음을 실행하십시오.

composer self-update

그런 다음 작곡가 패키지가 필요하면 완료됩니다.

composer require "<package-name>"