Der QML-Festplatten-Cache

Sie sollten Ihre QML-Module mit qt_add_qml_module definieren, um sicherzustellen, dass der Qt Quick Compiler Ihre QML- und JavaScript-Dateien schon vor der Zeit verarbeitet. Außerdem garantiert dies eine optimale Leistung zur Laufzeit. Die Qt Quick Compiler generiert Bytecode für jede Funktion und Bindung. Dieser Bytecode kann vom QML-Interpreter und dem Just-in-Time-Compiler (JIT) in der QML-Engine verwendet werden. Darüber hinaus erzeugt der Qt Quick Compiler generiert nativen Code für geeignete Funktionen und Bindungen. Der native Code kann direkt ausgeführt werden, was zu einer besseren Leistung führt als das Interpretieren oder Just-in-Time-Kompilieren des Byte-Codes. Sowohl der Bytecode als auch der native Code werden dann in Ihre Binärdatei kompiliert.

Wenn Sie qmake verwenden, können Sie CONFIG += qtquickcompiler angeben, um QML- und JavaScript-Dateien, die als Ressourcen zu Ihrem Projekt hinzugefügt werden, ähnlich zu behandeln. Qt Creator hat eine Einstellung, die es erlaubt, CONFIG += qtquickcompiler an die qmake-Kommandozeile zu übergeben. Standardmäßig ist dies für Release- und Profil-Builds aktiviert. qmake kann nicht so viele Informationen an die Qt Quick Compiler wie CMake. Daher wird die Kompilierung weniger nativen Code enthalten.

Sie sollten darauf achten, dass Sie Ihre QML-Dokumente möglichst aus dem Ressource-Dateisystem laden. Andernfalls wird die QML-Engine nicht in der Lage sein, den zuvor kompilierten Code zu finden.

Wenn zur Laufzeit kein Bytecode oder nativer Code für ein QML-Dokument gefunden werden kann oder wenn der Code zwar gefunden wird, aber nicht verwendet werden kann, kompiliert die QML-Engine das Dokument im laufenden Betrieb in eine Bytecode-Darstellung. Der Kompilierungsprozess kann zeitaufwändig sein, und das Ergebnis enthält nur Bytecode. Nachfolgende Ladevorgänge desselben Dokuments werden denselben Bytecode ergeben. Die QML-Engine kann diesen Schritt optimieren, indem sie das Ergebnis der Kompilierung zwischenspeichert. Sie speichert den Bytecode in einer Cachedatei und lädt die Cachedatei später, wenn dasselbe QML-Dokument erneut angefordert wird, anstatt es neu zu kompilieren. Normalerweise werden die Cache-Dateien in einem Unterverzeichnis qmlcache des Cache-Verzeichnisses des Systems gespeichert, das mit QStandardPaths::CacheLocation bezeichnet ist.

Es gibt Überprüfungen, die sicherstellen, dass Cache-Dateien und im Voraus kompilierter Code nur geladen werden, wenn alle folgenden Bedingungen erfüllt sind:

  • Die Qt-Version hat sich nicht geändert
  • Der Quellcode in der Originaldatei hat sich nicht geändert
  • Der QML-Debugger läuft nicht

Nur die Variable QML_FORCE_DISK_CACHE (siehe unten) setzt nur die Bedingung bezüglich des QML-Debuggers außer Kraft. Die anderen Umgebungsvariablen haben keinen Einfluss auf diese Bedingungen.

Die primäre Möglichkeit zur Feinabstimmung des Verhaltens in Bezug auf vorzeitig kompilierten Code und Zwischenspeicherung ist die Umgebungsvariable QML_DISK_CACHE. Diese Variable nimmt eine durch Komma getrennte Liste von Optionen auf, zum Beispiel:

QML_DISK_CACHE=aot,qmlc-read

Die verfügbaren Optionen sind wie folgt:

OptionBeschreibung
aot-nativeLädt die im Voraus kompilierten Kompiliereinheiten und erlaubt die Ausführung des darin gefundenen nativen Codes.
aot-bytecodeLädt die im Voraus kompilierten Kompilierungseinheiten und ermöglicht die Interpretation und Just-in-Time-Kompilierung von darin befindlichem Bytecode.
aotKurzform für aot-native,aot-bytecode.
qmlc-readLädt alle zwischengespeicherten Kompilierungseinheiten für QML- und JavaScript-Dateien aus dem Host-Dateisystem und ermöglicht die Interpretation und Just-in-Time-Kompilierung des darin gefundenen Bytecodes.
qmlc-schreibenWenn Sie eine QML- oder JavaScript-Datei spontan kompilieren, erstellen Sie anschließend eine Cache-Datei. Die Cache-Datei kann geladen werden, wenn das gleiche Dokument erneut angefordert wird.
qmlcKurzform für qmlc-read,qmlc-write.

Außerdem können Sie die folgenden Umgebungsvariablen verwenden:

UmgebungsvariableBeschreibung
QML_DISABLE_DISK_CACHEDeaktiviert den Festplatten-Cache und erzwingt die Neukompilierung aus dem Quellcode für alle QML- und JavaScript-Dateien. QML_DISABLE_DISK_CACHE setzt QML_DISK_CACHE außer Kraft.
QML_FORCE_DISK_CACHEAktiviert den Festplatten-Cache auch beim Debuggen von QML. Sie können den JavaScript-Debugger auf diese Weise nicht verwenden. Er kann z. B. nicht an Haltepunkten anhalten. Sie können jedoch weiterhin den QML-Inspektor verwenden, um die Objekthierarchie zu untersuchen. QML_FORCE_DISK_CACHE überschreibt QML_DISABLE_DISK_CACHE und QML_DISK_CACHE.
QML_DISK_CACHE_PATHGibt einen benutzerdefinierten Speicherort an, an dem die Cache-Dateien gespeichert werden sollen, anstatt den Standardspeicherort zu verwenden.

© 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.