QML ディスクキャッシュ
qt_add_qml_module を使ってQML モジュールを定義する必要があります。このモジュールは、Qt Quick Compilerが QML と JavaScript ファイルを先に処理するようにします。また、実行時に最適なパフォーマンスが保証されます。Qt Quick Compilerは各関数とバインディングのバイトコードを生成します。このバイトコードは QML インタープリタや QML エンジンの JIT コンパイラで利用することができます。さらに、Qt Quick Compilerは適切な関数やバインディングのネイティブコードを生成します。ネイティブコードは直接実行できるため、バイトコードの解釈やジャストインタイムコンパイルよりもパフォーマンスが向上します。その後、バイトコードとネイティブコードの両方がバイナリにコンパイルされます。
qmake を使用する際、CONFIG += qtquickcompiler
を指定することで、プロジェクトにリソースとして追加された QML や JavaScript ファイルを同様に扱うことができます。Qt Creatorには、qmake のコマンドラインに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 | キャッシュファイルを保存する場所を、デフォルトの場所ではなく、カスタムで指定します。 |
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。