>개발 도구 >composer >Composer 자동 로드 자동 로딩 성능 최적화 가이드 공유

Composer 자동 로드 자동 로딩 성능 최적화 가이드 공유

藏色散人
藏色散人앞으로
2020-08-05 13:10:513090검색

다음 튜토리얼 칼럼인 composer에서는 Composer 자동 로드 자동 로딩 성능 최적화 가이드를 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

Composer 자동 로드 자동 로딩 성능 최적화 가이드 공유

작곡가가 제공하는 자동 로드 메커니즘을 사용하면 코드를 정리하고 새로운 클래스 라이브러리를 도입하는 것이 매우 편리하지만 프로젝트 성능이 크게 저하됩니다.

작성기 자동 로드가 느린 주된 이유는 PSR-0 및 PSR-4에 대한 지원 때문입니다. 로더가 클래스 이름을 얻으면 파일 시스템에서 해당 클래스 파일 위치를 찾아야 합니다. 물론 이것은 우리가 개발할 때 여전히 유용하므로 추가하는 새 클래스 파일이 즉시 적용될 수 있습니다. 그러나 프로덕션 모드에서는 이러한 클래스 파일을 찾아서 최대한 빨리 로드하려고 합니다.

그래서 Composer는 여러 가지 최적화 전략을 제공합니다. 이러한 최적화 전략은 아래에 설명되어 있습니다.

첫 번째 레벨(레벨-1) 최적화: 클래스 맵 생성

실행 방법:

composer dump-autoload -o 명령을 실행합니다. (-o는 --optimize와 동일합니다. )composer dump-autoload -o (-o 等同于 --optimize)

原理:

这个命令的本质是将 PSR-4/PSR-0 的规则转化为了 classmap 的规则, 因为 classmap 中包含了所有类名与类文件路径的对应关系,所以加载器不再需要到文件系统中查找文件了。可以从 classmap 中直接找到类文件的路径。

注意事项

建议开启 opcache , 这样会极大的加速类的加载。

php5.5 以后的版本中默认自带了 opcache 。

这个命令并没有考虑到当在 classmap 中找不到目标类时的情况,当加载器找不到目标类时,仍旧会根据PSR-4/PSR-0 的规则去文件系统中查找

第二层级(Level-2/A)优化:权威的(Authoritative)classmap

执行命令:

执行命令 composer dump-autoload -a (-a 等同于 --classmap-authoritative)

原理

执行这个命令隐含的也执行了 Level-1 的命令, 即同样也是生成了 classmap,区别在于当加载器在 classmap 中找不到目标类时,不会再去文件系统中查找(即隐含的认为 classmap 中就是所有合法的类,不会有其他的类了,除非法调用)

注意事项

如果你的项目在运行时会生成类,使用这个优化策略会找不到这些新生成的类。

第二层级(Level-2/B)优化:使用 APCu cache

执行命令:

执行命令 composer dump-autoload --apcu

원리:

이 명령의 핵심은 PSR-4/PSR-0 규칙을 클래스맵 규칙으로 변환하는 것입니다. 클래스맵에는 모든 클래스 이름과 클래스 파일 경로 간의 대응이 포함되어 있으므로 로더가 더 이상 필요하지 않습니다. 파일 시스템에서 파일을 찾으십시오. 클래스 파일의 경로는 클래스맵에서 직접 확인할 수 있습니다.

Notes

opcache를 활성화하는 것이 좋습니다. 그러면 클래스 로딩 속도가 크게 빨라집니다.

php5.5 이상 버전에는 기본적으로 opcache가 함께 제공됩니다.

이 명령은 클래스 맵에서 대상 클래스를 찾을 수 없는 상황을 고려하지 않습니다. 로더가 대상 클래스를 찾을 수 없는 경우에도 PSR-4/PSR- 규칙에 따라 파일 시스템에서 검색합니다. 0

2차 레벨(레벨-2/A) 최적화: 신뢰할 수 있는 클래스맵

실행 명령:

  • 실행 명령 composer dump-autoload -a(-a는 - -와 동일) classmap-authoritative)

  • Principle
  • 이 명령을 암시적으로 실행하면 Level-1 명령도 실행됩니다. 즉, 클래스맵도 생성됩니다. 차이점은 로더가 클래스맵에서 대상 클래스를 찾을 수 없는 경우에는 생성된다는 것입니다. not 그런 다음 파일 시스템에서 검색합니다(즉, 모든 합법적인 클래스가 클래스맵에 있고 불법적으로 호출되지 않는 한 다른 클래스가 없다고 암묵적으로 믿습니다)
  • Notes

프로젝트가 실행 중인 경우, 클래스가 생성되며, 새로 생성된 클래스는 이 최적화 전략을 사용하여 찾을 수 없습니다. 🎜🎜🎜두 번째 레벨(레벨-2/B) 최적화: APCu 캐시 사용🎜🎜🎜🎜실행 명령: 🎜🎜🎜실행 명령 composer dump-autoload --apcu🎜🎜🎜원칙: 🎜 🎜 🎜이 전략을 사용하려면 apcu 확장 프로그램을 설치해야 합니다. 🎜🎜apcu는 메모리 조각으로 이해될 수 있으며 여러 프로세스에서 공유될 수 있습니다. 🎜🎜이 전략은 Level-1의 클래스맵에서 대상 클래스를 찾을 수 없을 때 파일 시스템에서 찾은 결과를 공유 메모리에 저장하는 것입니다. 다음에 검색할 때 검색할 필요 없이 메모리에서 직접 반환할 수 있습니다. 다시 파일 시스템으로 이동하여 다시 검색하십시오. 🎜🎜프로덕션 환경에서 이 전략은 일반적으로 Level-1과 함께 사용됩니다. 이런 식으로 프로덕션 환경에서 새로운 클래스가 생성되더라도 파일 시스템에서 한 번 검색하여 캐시할 수 있어 Level-2/A의 단점을 보완합니다. 🎜🎜🎜최적화 전략을 선택하는 방법은 무엇입니까? 🎜🎜🎜프로젝트가 실행될 때 클래스 파일을 생성하지 않고 작곡가의 자동 로드가 필요한 경우 프로젝트의 실제 상황에 따라 전략을 선택하세요. 그런 다음 Level-2/A를 사용하고, 그렇지 않으면 Level-1 및 Level-2/를 사용하세요. B가 더 나은 선택입니다. 🎜🎜🎜몇 가지 팁🎜🎜🎜🎜🎜 레벨 2 최적화는 기본적으로 레벨 1 최적화를 보완하는 것입니다. 레벨 2/A는 주로 클래스 맵에서 대상 클래스를 찾을 수 없을 때 검색을 계속할지 여부를 결정하는 것입니다. -2/B는 주로 캐싱 메커니즘을 제공합니다. 클래스맵에서 찾을 수 없으면 파일 시스템에서 찾은 파일 경로를 캐시하여 후속 검색 속도를 높입니다. 🎜🎜🎜🎜레벨 2/A가 실행되면 클래스맵에서 찾을 수 없고 계속 검색되지 않는다는 뜻입니다. 이때 레벨 2/B는 적용되지 않습니다. 🎜🎜🎜🎜상황이 어떻든 opcache를 켜는 것이 좋습니다. 이렇게 하면 클래스 로딩 속도가 10배 이상 향상되는 것을 시각적으로 측정해 볼 수 있습니다. 🎜🎜🎜

위 내용은 Composer 자동 로드 자동 로딩 성능 최적화 가이드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 dahouduan에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제