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을 활성화 시켜서 빠르게 클래스들을 로드할수 있게 해주는 것이 좋다.

 

 

 

 

참고 : 

 

오토로더(Auto loader)

이 책에서는 자동으로 클래스나 인터페이스를 로딩해 주는 것을 오토로딩으로 부르며 오토로딩을 수행하는 로더(Loader)를 오토로더(Auto Loader) 라고 호칭합니다.

www.lesstif.com

 

 

PHP Composer Autoloader 최적화

Composer Autoloader 최적화 Composer Autoloader는 상대적으로 빠르게 실행되나 PSR-4 및 PSR-0 autoload 규칙이 설정되는 방식으로 인해 클래스 이름을 확인하기 전에 파일 시스템을 검사해야 한다. 이 경우 성

blog.asamaru.net

 

 

composer classmap 참고 :

 

The composer.json schema - Composer

JSON schema Root Package Properties name description version type keywords homepage readme time license authors support funding Package links require require-dev (root-only) conflict replace provide suggest autoload PSR-4 PSR-0 Classmap Files Exclude files

getcomposer.org

 

반응형