QML 디스크 캐시

QML 모듈을 정의하려면 qt_add_qml_module을 사용하여 QML 모듈을 정의해야 합니다. Qt Quick Compiler 가 QML 및 JavaScript 파일을 미리 처리하도록 합니다. 또한 런타임에 최적의 성능을 보장합니다. 그리고 Qt Quick Compiler 는 각 함수와 바인딩에 대한 바이트 코드를 생성합니다. 이 바이트 코드는 QML 인터프리터와 QML 엔진의 JIT(Just-in-time) 컴파일러에서 사용할 수 있습니다. 또한 Qt Quick Compiler 는 적절한 함수와 바인딩에 대한 네이티브 코드를 생성합니다. 네이티브 코드는 직접 실행할 수 있으므로 바이트 코드를 해석하거나 적시 컴파일하는 것보다 더 나은 성능을 제공합니다. 그런 다음 바이트 코드와 네이티브 코드가 모두 바이너리로 컴파일됩니다.

qmake를 사용할 때 프로젝트에 리소스로 추가된 QML 및 JavaScript 파일에 비슷한 처리를 제공하도록 CONFIG += qtquickcompiler 을 지정할 수 있습니다. Qt Creator 에는 qmake 명령줄에 CONFIG += qtquickcompiler 을 전달할 수 있는 설정이 있습니다. 기본적으로 이 설정은 릴리스 및 프로파일 빌드에 대해 활성화되어 있습니다. qmake는 많은 정보를 Qt Quick Compiler 에 많은 정보를 전달할 수 없습니다. 따라서 컴파일에는 더 적은 네이티브 코드가 포함됩니다.

가능하면 리소스 파일 시스템에서 QML 문서를 로드해야 합니다. 그렇지 않으면 QML 엔진이 미리 컴파일된 코드를 찾을 수 없습니다.

런타임에 QML 문서에 대한 바이트 코드 또는 네이티브 코드를 찾을 수 없거나 코드를 찾았지만 사용할 수 없는 경우 QML 엔진은 문서를 즉석에서 바이트 코드 표현으로 컴파일합니다. 컴파일 프로세스는 시간이 오래 걸릴 수 있으며 결과에는 바이트 코드만 포함됩니다. 이후 동일한 문서를 로드해도 동일한 바이트 코드가 생성됩니다. QML 엔진은 컴파일 결과를 캐싱하여 이 단계를 최적화할 수 있습니다. 바이트 코드를 캐시 파일에 저장하고 나중에 동일한 QML 문서가 다시 요청될 때 다시 컴파일하는 대신 캐시 파일을 로드합니다. 일반적으로 캐시 파일은 QStandardPaths::CacheLocation 으로 표시되는 시스템 캐시 디렉터리의 하위 디렉터리 qmlcache 에 저장됩니다.

다음 조건이 모두 충족되는 경우에만 캐시 파일과 미리 컴파일된 코드가 로드되도록 하기 위해 검사가 이루어집니다:

  • Qt 버전이 변경되지 않았음
  • 원본 파일의 소스 코드가 변경되지 않았습니다.
  • QML 디버거가 실행되고 있지 않습니다.

QML_FORCE_DISK_CACHE 변수(아래 참조)만 QML 디버거와 관련된 조건만 재정의합니다. 다른 환경 변수는 이러한 조건에 영향을 미치지 않습니다.

미리 컴파일된 코드 및 캐싱과 관련된 동작을 미세 조정하는 주요 방법은 환경 변수 QML_DISK_CACHE 를 사용하는 것입니다. 이 변수는 예를 들어 쉼표로 구분된 옵션 목록을 받습니다:

QML_DISK_CACHE=aot,qmlc-read

사용 가능한 옵션은 다음과 같습니다:

옵션설명
aot-native미리 컴파일된 컴파일 유닛을 로드하고 그 안에 있는 모든 네이티브 코드를 실행할 수 있도록 허용합니다.
aot-bytecode미리 컴파일된 컴파일 단위를 로드하고 그 안에 있는 바이트 코드의 해석 및 적시 컴파일을 허용합니다.
aotaot-native,aot-bytecode 의 약어입니다.
qmlc-read호스트 파일 시스템에서 QML 및 JavaScript 파일에 대해 캐시된 컴파일 단위를 로드하고 해당 파일에 있는 바이트 코드의 해석 및 적시 컴파일을 허용합니다.
qmlc-writeQML 또는 JavaScript 파일을 즉시 컴파일할 때 나중에 캐시 파일을 생성합니다. 캐시 파일은 동일한 문서가 다시 요청될 때 로드할 수 있습니다.
qmlcqmlc-read,qmlc-write 의 약자입니다.

또한 다음 환경 변수를 사용할 수 있습니다:

환경 변수설명
QML_DISABLE_DISK_CACHE디스크 캐시를 비활성화하고 모든 QML 및 JavaScript 파일에 대해 소스에서 강제로 다시 컴파일합니다. QML_DISABLE_DISK_CACHEQML_DISK_CACHE 을 재정의합니다.
QML_FORCE_DISK_CACHEQML 디버깅 시에도 디스크 캐시를 활성화합니다. 이 방법으로는 JavaScript 디버거를 사용할 수 없습니다. 예를 들어 중단점에서 멈추지 못할 수 있습니다. 하지만 QML 인스펙터를 사용하여 객체 계층 구조를 탐색할 수 있습니다. QML_FORCE_DISK_CACHEQML_DISABLE_DISK_CACHEQML_DISK_CACHE 을 재정의합니다.
QML_DISK_CACHE_PATH기본 위치를 사용하는 대신 캐시 파일을 저장할 사용자 지정 위치를 지정합니다.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.