WebAssembly + WebView + Javascript Интерфейс для тяжелых расчетов? - PullRequest
0 голосов
/ 22 мая 2019

Так что я работаю над этим приложением, которое в настоящее время написано изначально для Интернета, Android и IOS.Это приложение делает некоторую тяжелую работу в фоновом режиме, которую мы ищем способы улучшить, но сохраняя три источника в основном того же кода отстой.

Одним из способов является создание библиотеки на C ++, которая затем используется в приложениях и через WebAssembly в Интернете.Это, однако, требует от нас создания новых версий android / приложений и публикации их в соответствующих магазинах.

Но потом я подумал, что WebAssembly можно использовать на всех платформах.Но так как мы все еще хотим предложить собственный опыт работы с мобильными платформами, я думаю, что WebView можно использовать с интерфейсом javascript для взаимодействия с библиотекой в ​​WebAssembly и представления данных в исходном виде.Обновления библиотеки необходимо выполнять только один раз, и во всех приложениях всегда установлена ​​последняя версия библиотеки.

Возможно ли это и будет ли она все еще обеспечивать высокую производительность?Будут ли узкие места в webview и javascript-интерфейсе?

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Насколько я понимаю, у вас есть нативное веб-приложение (HTML + JavaScript) и нативные приложения для Android (Java или Kotlin) и iOS (Swift или Objective-C).Приложение выполняет некоторые тяжелые задачи, связанные с производительностью. Я предполагаю, что эти проблемы возникают только в веб-версии приложения (например, JavaScript)?Вы хотите улучшить производительность этого кода, а также поделиться им на всех трех платформах?

Если это так, я думаю, что WebAssembly стоит рассмотреть.Вы можете создать библиотеку на C ++, которая будет изначально работать в iOS и Android и скомпилирована в WebAssembly через EmScripten для работы в Интернете.

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

Я не уверен, почему вы рассматриваете возможность запуска этогов WebView?Для iOS и Android вам не нужно будет использовать WebAssembly - вы можете запускать код C ++ без изменений.

0 голосов
/ 22 мая 2019

В зависимости от того, что делает ваша библиотека C ++, это может быть просто невозможно.

В отличие от того, что звучит веб-сборка, WebAssembly в браузерах - это, по сути, JavaScript , поскольку он запускается и управляется движком JS.Wasm работает в контексте JS, предлагаемом WebView.Так что это неверно, WebView можно использовать для взаимодействия между JS и Wasm.Правильный способ сказать, что JS также выполняет Wasm.

Это имеет огромное значение: Wasm не имеет доступа к собственным API , но к JS API.Если вашему коду C ++ нужны нативные службы Android, такие как оценка файлов, вы не должны использовать Wasm.

С точки зрения производительности это также зависит от того, что делает ваш код C ++.Преимущества производительности в Wasm достигнуты за счет того, что JS Garbage Collection не работает, а не запускается изначально.В настоящее время Wasm не может запускать графические процессоры, SIMD или многопоточность (хотя эти функции появятся в будущем, но пока не появятся).

Самым большим преимуществом WebAssembly является перенос кодов C ++ / Rust / Go / etc в веб-браузеры., необязательно для повышения производительности.

предпринимаются некоторые попытки запустить Wasm на собственных платформах вне движка JS, но они еще не готовы, и это очень далеко от работы на собственном мобильномплатформ.

...