首页 > 解决方案 > 用于繁重计算的 WebAssembly + WebView + Javascript 接口?

问题描述

所以我正在开发这个应用程序,它目前是为 web、android 和 ios 原生编写的。这个应用程序在后台做了一些繁重的工作,我们正在寻找改进的方法,但是保持三个基本相同的代码来源很糟糕。

一种方法是在 C++ 中创建一个库,然后在应用程序中以及通过 Web 上的 WebAssembly 使用该库。然而,这需要我们生成新版本的 android/apps 并将它们发布到各自的商店。

但后来我认为 WebAssembly 可能适用于所有平台。但由于我们仍然想在移动平台上提供原生体验,我认为 WebView 可以使用 javascript 接口与 WebAssembly 中的库进行通信并以原生方式呈现数据。只需对库进行一次更新,所有应用程序始终具有库的最新版本。

这可能吗?它仍然可以提供高性能吗?webview 和 javascript 界面会成为瓶颈吗?

标签: androidioswebassembly

解决方案


据我了解,您拥有原生 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++ 代码。


推荐阅读