この記事は The Qt Blog の Qt QML Performance improvements in Qt 5.8.0 を翻訳したものです。
執筆: Alex Blasche, 2017年3月8日
Qt 5.8 では大幅な Qt QML のパフォーマンスの改善がなされました。数人のエンジニアが多くの時間を費やし、どこがどう遅いのか、どう改善できるのかを調べました。これは Qt QML を最初にリリースした時から常に継続していることで、今後もこれは続くでしょう。ある程度の検討を重ねた結果、実際にどういう作業が行われているかをわかりやすくすることにしました。この長期に渡るプロジェクトを通していくつものパフォーマンス関連のツールや社内外のエンジニアによるベンチマークに関するノウハウが蓄積されています。これにより複雑なアレコレを一般化することが可能になりました。
Qt 5.6.2 と Qt 5.8.0 で、グラフィカルと非グラフィカルなベンチマークで起動時間を比較してみました。対象のプラットフォームは Windows と Ubuntu、macOS、iMX6 ボード(この中で唯一32bitの環境になります)です。起動時間は以下の Qt の環境で確認しました。
最後の二つでは、最初の起動時にキャッシュが生成され、それ以降はそのキャッシュが利用されるようになっています。アプリケーション自体に変更が無いという想定で実施しています。今回の比較に用いたのは Qt Quick Controls Gallery のサンプルアプリケーションになります。比較的規模が大きく、JavaScript のコード量も多めだという以外にはこれを選択した大きな理由はありません。以下が結果になります。
上記の起動時間に関する調査により利用したアプリケーションについての詳細な内容が分かりましたが、次のアプリケーションはそうでもないかもしれません。さらに詳細なベンチマークをとってみました。QML ベンチマークは2つの分野に分けることができます。最初の分野は QML のバインディングのパフォーマンス(生成、異なる型の読み書き)で、2つ目の分野はグラフィックスの描画のパフォーマンスです。これで何がわかったでしょうか?
これらの定期的な測定を10月に始めて以来、改善の度に新たな問題を発見してきています。これはパフォーマンス関連のテストをより短いサイクルで、もしくは自動化して実行する必要性を示唆しています。ベンチマークの結果 を共有しますので、是非確認してみてください。
現時点ではまだ調査が必要な様々な問題(例えば、Windows での起動時間や、各パフォーマンステストで見つかったリグレッションなど)があることをお伝えしておきます。コンパイラのアップデート以外にも、Qt QML にはさらに分析すべき様々な分野があることがわかっています。
Qt 5.8.0 では本当に様々な側面からの改善が成されました。5.8 以降もキャッシュの生成をコンパイル時に行うことやガベッジコレクターの改善などの計画が検討されています。今後もお楽しみに