Lila25mila
Lila25mila21. Januar 2019 06:48

Qt 5.12 LTS - Der Weg zum schnelleren Starten von QML-Anwendungen

Qt verwendet seit langem Benchmarks wie QMLBench, um uns zu helfen, zu wissen, wann eine Änderung zu Leistungseinbußen führt, aber es ist auch wichtig zu sehen, wie Qt auf einer höheren Ebene funktioniert und es Komponenten ermöglicht, auf eine Weise zu interagieren, die detaillierte Tests wie QMLBench nicht tun kann uns das zeigen. In diesem Artikel werden wir uns die Testergebnisse der Ausführung einer neuen Anwendung aus einer realeren QML-Testanwendung ansehen.


Benchmark

Für diese Tests wurde eine relativ einfache QML-Anwendung entwickelt, die viele QtDeclarative- und QtGraphicalEffects-Objekte verwendet. Der Anwendungscode wurde so geschrieben, wie ihn ein normaler Entwickler schreiben würde, ohne Optimierungen für Start, Speicherverbrauch oder Leistung. Da wir Benchmarks durchführen, verwendet die App keine interaktiven Elemente oder Benutzereingaben. Die Anwendung hat eine geringe Komplexität ohne abweichende Logik, sodass die Ergebnisse zwischen den Testläufen so konsistent wie möglich sind. Während kein Benchmark wirklich die Leistung der Benutzerinteraktion im wirklichen Leben nachahmen kann, zielt der besprochene Benchmark darauf ab, eine echte QML-Arbeitslast genauer darzustellen als entweder QMLBench oder das QtQuickControls „Galery“-Beispiel.

Anwendung testen. Es integriert Texturen, Animationen, QML-Formen, Repeater, komplexen Text, Partikeleffekte und GL-Shader, um eine schwerere, realistischere Anwendung als andere QML-Benchmarks wie QMLBench zu simulieren.

Anwendung testen. Es kombiniert Texturen, Animationen, QML-Formen, Repeater, komplexen Text, Partikeleffekte und GL-Shader, um eine schwerere, realere Anwendung als andere QML-Benchmarks wie QMLBench zu simulieren.

Laden Sie hier den Quellcode herunter.

Lars hat zuvor über das Engagement von Qt geschrieben, die Leistung von Qt zu verbessern, und mit der kürzlichen Veröffentlichung von Qt 5.12 LTS zeigen die unternommenen Anstrengungen dies wirklich, insbesondere in QML. Unter den Verbesserungen zielte eine große Anzahl darauf ab, die Startleistung zu verbessern. Von den getesteten Plattformen wurde die größte Verbesserung der Startleistung bei dem von uns getesteten Low-Power-Gerät, dem Toradex Apalis i.MX6, festgestellt. Werfen wir einen Blick darauf.

Leistung beim Start

Das obige Diagramm zeigt, wie die Qt 5.12 LTS-Funktionen die Startleistung wirklich beeinträchtigen, indem sie die Zeit bis zum ersten Frame von 5912 ms in Qt 5.6 auf nur 1258 ms in Qt 5.12.0 reduzieren, eine Verbesserung von 79 %! Dies ist einer Reihe neuer Funktionen zu verdanken, die kombiniert werden können, um die Startleistung zu verbessern. Gehen wir sie alle durch.

Das obige Diagramm zeigt, wie die Qt 5.12 LTS-Funktionen die Startleistung wirklich beeinträchtigen, indem sie die Zeit bis zum ersten Frame von 5912 ms in Qt 5.6 auf nur 1258 ms in Qt 5.12.0 reduzieren, eine Verbesserung von 79 %! Dies ist einer Reihe neuer Funktionen zu verdanken, die kombiniert werden können, um die Startleistung zu verbessern. Lassen Sie uns jeden durchgehen.

  • Shader-Cache implementiert in Qt 5.9 LTS

    Der Shader-Cache speichert die kompilierten OpenGL-Shader auf der Festplatte, sodass Sie vermeiden können, GL-Shader bei jedem Lauf neu zu kompilieren.

Vorteile: Reduziert die Startzeit und vermeidet Anwendungsverzögerungen, wenn ein neuer Shader gefunden wird, wenn sich der Shader bereits im Cache befindet.

Nachteile: Systeme mit wenig Speicherplatz löschen möglicherweise gelegentlich den Shader-Cache. Wenn Ihre Anwendung sehr komplexe Shader verwendet und auf einem Gerät mit geringer Leistung ausgeführt wird, auf dem die Shader-Kompilierung zu unerwünschten Startzeiten führen kann, ist es möglicherweise eine gute Idee, vorkompilierte Shader zu verwenden, um Caching-Probleme zu vermeiden. Es gibt keinen Leistungsunterschied zwischen zwischengespeicherten Shadern und vorkompilierten Shadern.

Schwierigkeitsgrad: nein! Dieser Prozess ist automatisch und erfordert keine manuelle Ausführung.

  • Kompilierte QML

    Ohne die Verwendung des unten beschriebenen schnellen Qt-Compilers werden QML-Anwendungen, die auf Qt-Versionen vor 5.9 LTS basieren, immer zur Laufzeit jedes Mal kompiliert, wenn die Anwendung ausgeführt wird. Abhängig von der Größe der Anwendung und den Verarbeitungskapazitäten des Hosts kann diese Aktion zu unerwünscht langen Startzeiten führen. Zwei Verbesserungen in Qt ermöglichen es nun, den Start komplexer QML-Anwendungen deutlich zu beschleunigen. Beide bieten beim Start den gleichen Leistungsschub.
    Dies ist Qt Quick Cache und vorgeneriertes QML (Qt Quick Compiler)

    Qt Quick Cache – Eingeführt in Qt 5.9 LTS
    Qt Quick Cache speichert während der Laufzeit kompiliertes QML an einem temporären Ort auf der Festplatte, sodass es nach dem ersten Lauf, wenn QML kompiliert wird, direkt bei nachfolgenden Läufen geladen werden kann, anstatt jedes Mal teure Kompilierungen durchzuführen.

    Vorteile : Kann komplexe Anwendungen mit einer großen Anzahl von QML-Dateien erheblich beschleunigen.

    Nachteile: Wenn Ihr Gerät über sehr wenig Speicherplatz verfügt, kann das Betriebssystem Caches automatisch löschen, was manchmal zu unerwartet langen Startzeiten führt.

    Schwierigkeitsgrad: nein! Dieser Prozess ist automatisch und erfordert keine manuelle Ausführung.

    Vorgeneriertes QML (Qt Quick Compiler) - Eingeführt in Qt 5.3 für kommerzielle Lizenznehmer, sowohl kommerzielle als auch Open Source, in Qt 5.11
    Mit dem Fast Compiler können Sie eine vorkompilierte QML-Anwendung packen und verwenden. Ursprünglich seit Qt 5.3 unter einer kommerziellen Lizenz verfügbar, steht es seit Qt 5.11 sowohl kommerziellen als auch Open-Source-Benutzern zur Verfügung.

    Vorteile: Der Vorteil der Verwendung von Quick Compiler besteht darin, dass er sich zur Laufzeit nicht auf den generierten QML-Cache verlassen muss, sodass Sie sich keine Gedanken über unerwartet lange Startzeiten machen müssen, nachdem ein bestimmter Anwendungshost seine temporären Dateien bereinigt hat .

    Kontra: Nein!

    Nutzungsschwierigkeiten: gering. Siehe zugehörige Dokumentation. Oft ist dies so einfach wie das Hinzufügen von "qtquickcompiler" zu CONFIG in der .pro-Datei Ihres Projekts!

  • Entfernungsfelder - implementiert in Qt 5.12 LTS

    Obwohl Qt schon seit langem Entfernungsfelder beim Rendern von Schriftarten verwendet, um sauberere, schärfere und animierte Schriftarten zu erhalten, führt Qt 5.12 eine Methode zum Vorberechnen von Entfernungsfeldern ein.

    Vorteile: Die Verwendung vorgenerierter Schriftarten für das Entfernungsfeld kann die Startleistung erheblich verlangsamen, wenn komplexe Schriftarten wie dekorative lateinische, chinesische, japanische oder Sanskrit-Schriftarten verwendet werden. Wenn Ihre Anwendung viel Text, mehrere Schriftarten oder komplexe Schriftarten verwendet, kann die Vorgenerierung von Entfernungsfeldern sehr viel Startzeit in Anspruch nehmen.

    Nachteile: Generierte Zeichensatzdateien mit Abstand sind auf der Festplatte etwas größer als Standardzeichensätze. Dies kann optimiert werden, indem Sie nur die Symbole auswählen, die in Ihrer Anwendung angezeigt werden, wenn Sie das Distanzfeld-Generator-Tool verwenden. Nicht ausgewählte Glyphen werden zur Laufzeit nach Bedarf berechnet.

    Nutzungsschwierigkeiten: gering. Siehe zugehörige Dokumentation. Es ist kein zusätzlicher Code erforderlich und es dauert Sekunden, um Abstandsfelder für Ihre Schriftart zu generieren.

  • Komprimierte Texturen - implementiert in Qt 5.11

    Durch die Bereitstellung von OpenGL mit komprimierten Texturen, die direkt vom Gateway in den Videospeicher geladen werden können, entfällt die Notwendigkeit für Qt, andere Dateitypen (jpg, png usw.) zum Laden vorzubereiten.

    Vorteile: Die Verwendung komprimierter Texturen bietet schnellere Startzeiten und eine geringere Speichernutzung. Je nachdem, wie stark Ihre Textur verwendet wird und wie stark Sie die Komprimierung verwenden, kann die Leistung sogar etwas verbessert werden.

    Nachteile: Obwohl die für Texturen verwendeten Komprimierungsalgorithmen von Natur aus einen gewissen Kompromiss bei der visuellen Wiedergabetreue erfordern, erfahren alle außer den extremsten Komprimierungsschemata normalerweise keinen sichtbaren Verlust an Wiedergabetreue. Die Auswahl des richtigen Komprimierungsschemas für den Anwendungsfall Ihrer Anwendung ist eine wichtige Überlegung.

    Nutzungsschwierigkeiten: gering. Es ist fast keine Codierung erforderlich, ändern Sie einfach die Texturdateierweiterungen in Ihrem QT-Code.

Ergebnisse

I.MX6 ist eine großartige Einführung in die eingebettete Hardware der Mittelklasse und die in Qt 5.12 LTS enthaltenen Leistungsverbesserungen. Wenn Sie alle Verbesserungen zusammennehmen, können Sie die Startzeit für Geräte mit geringem Stromverbrauch wirklich reduzieren.

Mit diesen neuesten Testergebnissen für Low-Power-Hardware kann Qt 5.12 Ihre Entwicklung unterstützen, indem es die Startzeit erheblich verkürzt, insbesondere wenn es auf eingebetteten Geräten mit niedriger bis mittlerer Reichweite ausgeführt wird. Diese neuen Leistungsverbesserungen lassen sich mit nur geringfügigen Änderungen an Ihrer Codebasis einfach implementieren, sodass es kaum einen Grund gibt, nicht sofort mit der Verwendung von Qt 5.12 zu beginnen, insbesondere wenn Ihr Projekt umfangreiche QML-Anwendungen in einen kleinen SoC quetscht. Die folgende Tabelle zeigt, was mit Qt 5.12 LTS möglich ist.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken