Lila25mila
Lila25mila21 января 2019 г. 6:48

Qt 5.12 LTS - путь к более быстрому запуску приложений QML

Компания Qt уже давно использует такие тесты, как QMLBench, которые помогают нам узнать, когда изменение вызывает снижение производительности, но также важно видеть, как Qt работает на более высоком уровне, позволяя компонентам взаимодействовать таким образом, чего детальные тесты, такие как QMLBench не могут нам показать этого. В этой статье мы рассмотрим результаты тестирования запуска нового приложения из более реального приложения для тестирования QML.


Бенчмарк

Для этих тестов было разработано относительно простое приложение QML, которое использует множество объектов QtDeclarative и QtGraphicalEffects. Код приложения был написан, так как бы его написал обычный разработчик без оптимизации запуска, потребления памяти или производительности. Поскольку мы проводим сравнительный анализ, то приложение не использует интерактивные элементы или пользовательский ввод. Приложение имеет низкую сложность, без расходящейся логики, поэтому результаты как можно более согласованы между запусками теста. Хотя ни один эталонный тест не сможет действительно имитировать реальную производительность при взаимодействии с пользователем, а обсуждаемый тест направлен на более точное представление реальной рабочей нагрузки QML, чем QMLBench или пример «Galery» QtQuickControls.

Тестовое приложение. Оно объединяет текстуры, анимацию, формы QML, повторители, сложный текст, эффекты частиц и шейдеры GL для имитации более тяжелого, более реального приложения, чем другие тесты QML, такие как QMLBench.

Тестовое приложение. Оно объединяет текстуры, анимацию, формы QML, повторители, сложный текст, эффекты частиц и шейдеры GL для имитации более тяжелого, более реального приложения, чем другие тесты QML, такие как QMLBench.

Загрузить исходный код можно по ссылке.

Ранее Ларс писал о приверженности компании Qt улучшению производительности Qt, и с недавним выпуском Qt 5.12 LTS, предпринятые усилия действительно показывают это, особенно в QML. Среди улучшений большое количество было направлено на улучшение производительности запуска. Из протестированных платформ наибольшее улучшение производительности при запуске было отмечено на тестируемом нами устройстве с низким энергопотреблением - Toradex Apalis i.MX6. Давайте рассмотрим это.

Производительность при запуске

Диаграмма выше показывает, как возможности Qt 5.12 LTS действительно снижаeт производительность запуска, уменьшая время до первого кадра с 5912 мс в Qt 5.6 до всего 1258 мс в Qt 5.12.0, что на 79% меньше! Это благодаря ряду новых функций, которые можно объединить для повышения производительности при запуске. Давайте пройдемся по каждому.

Диаграмма выше показывает, как возможности Qt 5.12 LTS действительно снижаeт производительность запуска, уменьшая время до первого кадра с 5912 мс в Qt 5.6 до всего 1258 мс в Qt 5.12.0, что на 79% меньше! Это благодаря ряду новых функций, которые можно объединить для повышения производительности при запуске. Давайте пройдемся по каждому.

  • Шейдерный кеш внедрён в Qt 5.9 LTS

    Кэш шейдеров сохраняет скомпилированные шейдеры OpenGL на диск, благодаря чему можно избежать перекомпиляции шейдеров GL при каждом выполнении.

    Плюсы: уменьшает время запуска и позволяет избежать задержки приложения при обнаружении нового шейдера, если шейдер уже находится в кэше.

    Минусы: Системы с небольшим хранилищем могут иногда очищать кеш шейдеров. Если ваше приложение использует очень сложные шейдеры и работает на маломощном устройстве, где компиляция шейдера может привести к нежелательному времени запуска, возможна рекомендация использовать предварительно скомпилированные шейдеры, чтобы избежать проблем с кэшированием. Нет никакой разницы в производительности между кэшированными шейдерами и предварительно скомпилированными шейдерами.

    Сложности использования: нет! Этот процесс является автоматическим и не требует выполнения вручную.

  • Скомпилированный QML

    Без использования быстрого компилятора Qt, подробно описанного ниже, приложения QML, созданные на версиях Qt до 5.9 LTS, всегда будут компилироваться во время выполнения при каждом запуске приложения. В зависимости от размера приложения и возможностей обработки хоста это действие может привести к нежелательно долгому времени запуска. Два улучшения в Qt теперь позволяют значительно ускорить запуск сложных приложений QML. Оба из них обеспечивают одинаковое повышение производительности при запуске.
    Это Qt Quick Cache и предварительно сгенерированный QML (Qt Quick Compiler)

    Qt Quick Cache - Представлен в Qt 5.9 LTS
    Qt Quick Cache сохраняет скомпилированный во время выполнения QML на диск во временном местоположении, так что после первого запуска, когда компилируется QML, его можно напрямую загружать при последующих выполнениях вместо выполнения дорогостоящих компиляций каждый раз.

    Плюсы : может значительно ускорить сложные приложения с большим количеством файлов QML.

    Минусы: если ваше устройство имеет очень маленькое запоминающее устройство, то операционная система может автоматически очищать кэши, что иногда приводит к неожиданно долгому запуску.

    Сложности использования: нет! Этот процесс является автоматическим и не требует выполнения вручную.

    Предварительно сгенерированный QML (Qt Quick Compiler) - Представлен в Qt 5.3 для коммерческих лицензиатов, как коммерческих, так и с открытым исходным кодом, в Qt 5.11
    Быстрый компилятор позволяет упаковывать и использовать предварительно скомпилированное QML приложение. Первоначально доступный по коммерческой лицензии начиная с Qt 5.3, он доступен как для коммерческих пользователей, так и для пользователей с открытым исходным кодом, начиная с Qt 5.11.

    Плюсы: Преимущество использования Quick Compiler заключается в том, что ему не нужно полагаться на сгенерированный кэш QML во время выполнения, поэтому вам не нужно беспокоиться о неожиданно долгом времени запуска после того, как конкретный хост приложения очистит свои временные файлы.

    Минусы: нет!

    Сложности использования: низкие. Смотрите соответсвующую документацию. Часто это так же просто, как добавить «qtquickcompiler» к CONFIG в файле .pro вашего проекта!

  • Поля расстояний (Distance Fields) - внедрено в Qt 5.12 LTS

    Хотя Qt уже давно использует поля расстояний при рендеринге шрифтов, чтобы иметь более чистые, четкие, анимируемые шрифты, Qt 5.12 представляет метод предварительного вычисления полей расстояний.

    Плюсы: использование предварительно сгенерированных шрифтов для поля расстояния может значительно снизить производительность при запуске при использовании сложных шрифтов, таких как декоративные латинские шрифты, китайский, японский или санскрит. Если ваше приложение использует много текста, несколько шрифтов или сложные шрифты, предварительная генерация полей расстояния может потратить огромное количество времени на запуск.

    Минусы: Сгенерированные файлы шрифтов поля расстояния будут немного больше на диске, чем стандартные шрифты. Это можно оптимизировать, выбрав только те символы, которые будут отображаться в вашем приложении при использовании инструмента «Генератор полей расстояний». Не выбранные глифы будут рассчитываться по мере необходимости во время выполнения.

    Сложности использования: низкие. Смотрите соответствующую документацию. Никакого дополнительного кода не требуется, и генерация полей расстояния для вашего шрифта занимает секунды.

  • Сжатые текстуры - внедрено в Qt 5.11

    Предоставление OpenGL сжатых текстур, готовых для загрузки в видеопамять прямо из шлюза, избавляет Qt от необходимости готовить файлы других типов (jpg, png и т. Д.) для загрузки.

    Плюсы: использование сжатых текстур обеспечивает более быстрое время запуска, уменьшение использования памяти. Это может даже немного повысить производительность в зависимости от того, насколько интенсивно используется ваша текстура и насколько сильно вы используете сжатие.

    Минусы: Хотя алгоритмы сжатия, используемые для текстур, по своей природе требуют некоторого компромисса в визуальной точности, все схемы сжатия, кроме самых экстремальных, обычно не будут испытывать каких-либо видимых потерь точности. Выбор правильной схемы сжатия для варианта использования вашего приложения является важным фактором.

    Сложности использования: низкие. Практически никакого написания кода не требуется, нужно всего лишь изменить расширения файлов текстур в вашем коде qt.

Выводы

I.MX6 является отличным представлением встраиваемого оборудования среднего уровня, и улучшения производительности, включенные в Qt 5.12 LTS. Соберите все улучшения вместе, и вы действительно сможете сократить время запуска, необходимое для устройств с низким энергопотреблением.

С этими последними результатами испытаний для аппаратного обеспечения с низким энергопотреблением Qt 5.12 может помочь вашей разработке, значительно сократив время запуска, особенно при работе на встраиваемых устройствах низкого и среднего уровня. Эти новые улучшения производительности легко внедрить, требуя лишь самых незначительных изменений в вашей кодовой базе, поэтому есть очень мало причин не сразу начинать использовать Qt 5.12, особенно если ваш проект втиснет тяжелые приложения QML в SoC маленького размера. Приведенная ниже таблица является показателем того, что возможно с Qt 5.12 LTS.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
г
  • ги
  • 24 апреля 2024 г. 1:51

C++ - Тест 005. Структуры и Классы

  • Результат:41баллов,
  • Очки рейтинга-8
l
  • laei
  • 23 апреля 2024 г. 19:19

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:10баллов,
  • Очки рейтинга-10
l
  • laei
  • 23 апреля 2024 г. 19:17

C++ - Тест 003. Условия и циклы

  • Результат:50баллов,
  • Очки рейтинга-4
Последние комментарии
k
kmssr9 февраля 2024 г. 5:43
Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий Кононенко5 февраля 2024 г. 12:50
Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25 декабря 2023 г. 21:30
Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
J
JonnyJo25 декабря 2023 г. 19:38
Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
G
Gvozdik19 декабря 2023 г. 8:01
Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Сейчас обсуждают на форуме
G
Gar22 апреля 2024 г. 15:46
Clipboard Как скопировать окно целиком в clipb?
DA
Dr Gangil Academics20 апреля 2024 г. 17:45
Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
a
a_vlasov14 апреля 2024 г. 16:41
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел Дорофеев
Павел Дорофеев14 апреля 2024 г. 12:35
QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
f
fastrex4 апреля 2024 г. 14:47
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

Следите за нами в социальных сетях