Lila25mila
Lila25milaҚаң. 21, 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 хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
Г

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:66ұпай,
  • Бағалау ұпайлары-1
t

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:33ұпай,
  • Бағалау ұпайлары-10
t

Qt - Тест 001. Сигналы и слоты

  • Нәтиже:52ұпай,
  • Бағалау ұпайлары-4
Соңғы пікірлер
G
GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssrАқп. 8, 2024, 6:43 Т.Қ.
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
F
FynjyШілде 22, 2024, 4:15 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCT
BlinCTМаусым 25, 2024, 1 Т.Ж.
Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
BlinCT
BlinCTМамыр 5, 2024, 5:46 Т.Ж.
Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
Evgenii Legotckoi
Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

Бізді әлеуметтік желілерде бақылаңыз