android - 用于繁重计算的 WebAssembly + WebView + Javascript 接口?
问题描述
所以我正在开发这个应用程序,它目前是为 web、android 和 ios 原生编写的。这个应用程序在后台做了一些繁重的工作,我们正在寻找改进的方法,但是保持三个基本相同的代码来源很糟糕。
一种方法是在 C++ 中创建一个库,然后在应用程序中以及通过 Web 上的 WebAssembly 使用该库。然而,这需要我们生成新版本的 android/apps 并将它们发布到各自的商店。
但后来我认为 WebAssembly 可能适用于所有平台。但由于我们仍然想在移动平台上提供原生体验,我认为 WebView 可以使用 javascript 接口与 WebAssembly 中的库进行通信并以原生方式呈现数据。只需对库进行一次更新,所有应用程序始终具有库的最新版本。
这可能吗?它仍然可以提供高性能吗?webview 和 javascript 界面会成为瓶颈吗?
解决方案
据我了解,您拥有原生 Web 应用程序(HTML + JavaScript)和原生 Android(Java 或 Kotlin)和 iOS(Swift 或 Objective-C)应用程序。该应用程序做了一些有性能问题的繁重工作 - 我猜这些问题只出现在应用程序的 Web(即 JavaScript)版本中?您想提高此代码的性能,并在所有三个平台上共享它吗?
如果是这样的话,我认为 WebAssembly 值得考虑。您可以使用 C++ 创建一个库,该库在 iOS 和 Android 中本机运行,并通过 EmScripten 编译为 WebAssembly 以在 Web 上运行。
要记住的一件事是 WebAssembly 没有内置的 IO。因此,与您的代码的所有交互都必须跨越 JavaScript / WebAssembly 边界,这确实会产生惩罚。因此,这种方法最适合具有简单接口的算法,例如它们可能对少量数据执行大量计算,然后返回结果。
我不确定您为什么考虑在 WebView 中运行它?对于 iOS 和 Android,您不需要使用 WebAssembly - 您可以本地运行 C++ 代码。
推荐阅读
- mysql - 使用 HTML 代码从 SQLServer 迁移到 MySQL-Server DB
- javascript - 为什么我不能填写厨师的文件?
- android - TextView 没有显示某些字符
- security - Threadfix 和 Twislock 有什么区别?
- typescript - Typescript 和 @octokit/webhooks.js:基于 `EmitterWebhookEventName` 约束事件类型
- vb.net - 不允许创建新行,但文本框仍然是带有 wordwarp 的多行
- java - 圆形水平回收器视图适配器
- zsh - 从 zsh CLI 将数组作为输入变量传递到 Ruby 文件中
- android - 动态数据添加到数据集时折线图图形闪烁
- tensorflow - 二进制分类未正确训练