QML ディスクキャッシュ
qt_add_qml_module を使ってQML モジュールを定義すると、Qt Quick コンパイラがQML ファイルと JavaScript ファイルを先に処理するようになります。また、実行時に最適なパフォーマンスが保証されます。Qt Quick コンパイラーは、各関数とバインディングのバイトコードを生成します。このバイトコードは、QMLインタプリタやQMLエンジンのJITコンパイラで使用することができます。また、Qt Quick コンパイラは、適切な関数やバインディングのネイティブコードを生成します。このネイティブコードは直接実行することが可能であり、 バイトコードを解釈したり、ジャストインタイムコンパイルしたりするよりも優れた パフォーマンスを発揮します。その後、バイトコードとネイティブコードの両方がバイナリにコンパイルされます。
qmakeを使用する際、CONFIG += qtquickcompiler
を指定することで、プロジェクトにリソースとして追加されたQMLファイルやJavaScriptファイルを同様に扱うことができます。 Qt Creatorqmake コマンドラインにCONFIG += qtquickcompiler
を渡す設定があります。デフォルトでは、リリースビルドとプロファイルビルドで有効になっています。qmake はCMake ほど多くの情報を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 | 前もってコンパイルされたコンパイル・ユニットをロードし、その中で見つかったバイトコードの解釈とジャストインタイム・コンパイルを許可する。 |
aot | aot-native,aot-bytecode の省略形。 |
qmlc-read | ホスト側のファイルシステムから QML や JavaScript のコンパイル単位を読み込み、 その中で見つかったバイトコードの解釈とジャストインタイムのコンパイルを許可する。 |
qmlc-write | QML や JavaScript ファイルをオンザフライでコンパイルする際に、キャッシュ ファイルを作成します。キャッシュファイルは、同じ文書が再度要求されたときに読み込むことができます。 |
qmlc | qmlc-read,qmlc-write の省略形。 |
さらに、以下の環境変数を使うことができます:
環境変数 | 説明 |
---|---|
QML_DISABLE_DISK_CACHE | QML_DISABLE_DISK_CACHE はQML_DISK_CACHE を上書きします。 |
QML_FORCE_DISK_CACHE | QMLのデバッグ時にもディスクキャッシュを有効にします。JavaScript デバッガはこの方法では使用できません。例えば、ブレークポイントでの停止に失敗する可能性があります。QML_FORCE_DISK_CACHE はQML_DISABLE_DISK_CACHE とQML_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.