Почему игры работают быстро, а бизнес-приложения тормозят

Хотите пойти прямо и посмотреть, что это такое? Сразу дам ссылки!

Вы когда-нибудь замечали, как молниеносно работают игры, в то время как бизнес-приложения и приложения для повышения производительности часто отстают в плане скорости и отклика?

В то время как игры отдают предпочтение скорости, чтобы обеспечить увлекательный пользовательский опыт, другие типы приложений сосредоточены на предоставлении различных форм ценности. Однако что их отличает с технической точки зрения?

Разве не было бы здорово, если бы бизнес-приложения и приложения для повышения производительности могли обеспечивать такую ​​же плавность работы, как и игры?

В этой статье мы коснемся основных причин, но, что более важно, предложим потенциальное решение для преодоления разрыва с помощью Rust.

Технические отличия

Игры разрабатываются с учетом производительности, часто с использованием низкоуровневых языков, таких как C++, и графических библиотек, таких как OpenGL, Metal, DirectX и Vulkan.

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

Преодоление разрыва с помощью Rust

Я думаю, что Rust может сыграть решающую роль в преодолении разрыва между игровой производительностью и разработкой бизнес-приложений. Rust предлагает уникальное сочетание низкоуровневого контроля и высокой производительности для разработчиков.

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

Представляем приложение

Чтобы изучить возможности преодоления разрыва в производительности, я разработал фреймворк под названием Appy. Чтобы выделить его особенности:

  1. Прямое аппаратное ускорение. Appy рисует свои графические элементы напрямую, используя аппаратное ускорение, в настоящее время использующее OpenGL. Он избегает использования WebView, DOM или Virtual DOM, черпая вдохновение из практики разработки игр.
  2. Концепции, подобные React. Appy использует несколько концепций React, таких как XML, функциональные компоненты, крючки и контексты, для повышения производительности разработчиков. Однако он не полагается на виртуальный DOM, что обеспечивает более эффективный рендеринг.
  3. Упрощенная сборка и развертывание. Appy предоставляет инструмент командной строки, который компилирует приложение с помощью одной команды, подстраиваясь под знакомую среду программистов на Rust. Это устраняет необходимость в сложных инструментах, таких как Android Studio. Хотя текущая реализация ориентирована на Android, работа над поддержкой iOS также ведется.

Прогресс и следующие шаги

В настоящее время исходный код доступен на GitHub, а пример калькулятора, созданного с помощью Appy, можно загрузить с testapp.io. Он публикуется в виде крейта, и доступна документация.

Кроме того, фреймворк теперь поддерживает различные библиотеки создания окон и контекстов. Инструмент развертывания обновлен и переименован в cargo-sdl-apk. Хотя приложение Appy еще не закончено, оно достигло пригодного для использования состояния, и на данный момент я действительно был бы достаточно уверен, чтобы взяться за разработку приложения на основе Appy.

Связь с другими решениями

С момента моей последней статьи, в которой я представил Appy около месяца назад, я получил много отличных отзывов от сообщества Rust. Один вопрос, который я получил, заключается в том, что отличает Appy от других библиотек. Очевидно, что хорошие идеи никогда не существуют изолированно! Вот небольшое сравнение:

  • Yew — это фреймворк Rust, который также использует XML, но выполняет рендеринг в DOM в браузере, таком как React. Можно сказать, что если Yew похож на React, то Appy больше похож на React Native.
  • Dioxus также является декларативной средой пользовательского интерфейса Rust. Текущая реализация, по-видимому, в первую очередь ориентирована на Интернет, но архитектура не зависит от платформы. Freya — это экспериментальное воплощение, использующее собственный рендеринг, но в настоящее время ориентированное только на настольные платформы. Dioxus не использует XML, но использует что-то функционально похожее. Из существующих решений я бы сказал, что комбинация Dioxus/Freya представляет собой видение, наиболее похожее на мое.

Почему XML?

Другой вопрос, который я получил, заключается в том, почему я использую XML для объявления элементов компонентов. Я предполагаю, что ответ заключается в том, что это делает реакция, и поэтому она знакома.

Очевидно, что это хорошая вещь, чтобы оспорить это предположение. Чтобы сделать объяснение более информативным, позвольте мне сначала показать, как на самом деле выглядит код приложения:

use appy::{components::*, types::*, *};

#[main_window]
pub fn app() -> Elements {
    apx! {
        <blk height=pct(50)>
            <bg color=0x000080/>
            <text text="Hello Blue World" color=0x8080ff />
        </blk>
    }
}

Что-то более полное, см. код для примера калькулятора, где очевидно, что деревья компонентов для любого реального приложения довольно быстро уходят довольно глубоко. Я думаю, что XML — лучший инструмент для работы, чтобы сделать это читабельным и управляемым.

Однако я понимаю, что не все согласны, и поэтому вышеизложенное также можно записать так:

use appy::{components::*, types::*, *};

#[main_window]
pub fn app() -> Elements {
    vec![
        blk().height(pct(50)).children(vec![
            bg().color(0x000080),
            text().text("Hello Blue World").color(0x8080ff)
        ])
    ]
}

Заключение

Игры известны своей высокой производительностью, в то время как бизнес-приложения часто отдают приоритет различным аспектам предоставления ценности. Однако, используя язык программирования Rust и внедряя инфраструктуру Appy, разработчики могут сократить разрыв и создавать бизнес-приложения с игровой плавностью и интерактивностью.

Благодаря продолжающейся разработке и потенциальному расширению до iOS Appy обещает предоставить разработчикам возможность создавать высокопроизводительные бизнес-приложения без ущерба для производительности.