В современном мире выбор инструментов для разработки нативных кроссплатформенных приложений является сложной задачей не смотря на небольшой спектр решений, представленных в этой области, по сравнению с многообразием систем, существующих в мире Web разработки. В первую очередь это касается проектов, для которых главным критерием является производительность, что накладывает ограничения как на стек используемых технологий, так и на количество связывающих их API-слоев. Таким образом возникает неизбежный компромисс между эффективностью кода и скоростью разработки пользовательского интерфейса. Ограничимся рассмотрением монолитных приложений, использующих Cd—+ в качестве основного языка.
В описанных ограничениях самым популярным среди имеющихся решений является многопрофильный, кроссплатформенный фреймворк Qt. Однако ввиду постепенного ужесточения лицензии на продукты Qt Group во всем мире и частичного запрета на их использование в нашей стране, применение данного фреймворка становится всё менее оправданным. Также Qt изначально создавался как универсальный фреймворк широкого применения и зачастую это сказывается на его производительности в случае высоконагруженных систем, работающих с тяжелыми графическими вычислениями, такими как потоковое видео высокого разрешения, анимации, 2D и 3D сцены, которые тесно интегрированы в пользовательский интерфейс и не могут быть вынесены в независимые окна. Данная работа посвящена анализу подобных систем и разработке альтернативного узкоспециализированного фреймворка, позволяющего создавать современные интерфейсы.
В ходе работы были получены следующие результаты.
1. Были выявлены особенности систем Qt Widgets и Qt Quick 2, подробно описаны применяемые архитектурные решения и их различия.
2. Был разработан UI фреймворк ImReady, поддерживающий адаптивную layout-систему и модель обработки событий.
3. Разработано средство тестирования графического интерфейса.
4. Было проведено сравнение производительности полученного фреймворка с Qt в различных сценариях использования приложения.
Таким образом, был получен фреймворк, с помощью которого можно создавать современный пользовательский интерфейс, состоящий из множества сложных элементов. При этом благодаря встраиванию в основной цикл рендеринга он позволяет минимизировать потребление ресурсов на отрисовку элементов управления. Однако его использование оправдано лишь в случае трудоемких вычислений на графическом процессоре, которые составляют основную часть потребляемых приложением ресурсов.