Laravel
[Laravel] 오토로더 classmap 과 psr-4 성능 최적화
먹세
2021. 12. 7. 07:58
composer.json 내 autoload 부분에 기술된 형태에 따라
classmap 방식으로 class들을 로딩할건지 psr-4 방식으로 할건지 나뉜다.
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
}
},
classmap : composer.json 에 classmap 에 지정된 폴더 내의 모든 php를 읽어서 /vendor/composer/autoload_classmap.php 에 정적으로 배열을 생성하고 이 파일들을 한번에 오토로딩 한다.
장점 : 클래스들을 미리 로딩하므로 런타임시 psr-4보다 성능이 향상됨
단점 : 클래스를 추가할 때마다 dump-autoload를 해서 클래스맵을 작성 해줘야 하는 번거로움
psr-4 : 정적배열에 .php가 아닌, 네임스페이스와 이를 매칭시킬 폴더경로만 지정하게 되며, 런타임시 동적으로 네임스페이스를 이용하여 클래스들을 찾아서 로딩 시킨다. (클래스맵보다 속도 느림)
장점 : 클래스들을 추가하더라도 별도로 dump-autoload를 하지 않아도 런타임시 네임스페이스를 통해 클래스들을 찾음
단점 : 그때그때 클래스들을 찾아서 로딩시키므로 classmap보다 성능저하
composer.json 에 autoload를 추가한 후 반영하는 방법 (패키지들이 이미 설치된 후) :
composer dump-autoload -o
//또는
composer dump-autoload --optimize
패키지를 최초 설치시 :
composer install -o
composer update --optimize-autoloader
성능최적화 시 production 환경에서는 항상 classmap을 활성화 시켜서 빠르게 클래스들을 로드할수 있게 해주는 것이 좋다.
참고 :
composer classmap 참고 :
반응형