jus*_*ser 7 android ios webassembly
所以我正在开发这个应用程序,它目前是为网络、Android 和 iOS 原生编写的。这个应用程序在后台做了一些繁重的工作,我们正在寻找改进的方法,但是保留三个基本相同的代码源很糟糕。
一种方法是用 C++ 创建一个库,然后在应用程序中并通过 WebAssembly 在网络上使用该库。然而,这需要我们生成新版本的 android/apps 并将它们发布到各自的商店。
但后来我想到 WebAssembly 可能可以在所有平台上使用。但由于我们仍然希望在移动平台上提供本机体验,我认为可以使用 WebView 和 javascript 接口来与 WebAssembly 中的库进行通信并以本机方式呈现数据。对库的更新只需完成一次,并且所有应用程序始终拥有最新版本的库。
这可能吗?它仍然能提供高性能吗?webview 和 javascript 接口会成为瓶颈吗?
据我了解,您有一个本机 Web 应用程序(HTML + JavaScript)和本机 Android(Java 或 Kotlin)和 iOS(Swift 或 Objective-C)应用程序。该应用程序做了一些繁重的工作,存在性能问题 - 我猜测这些问题只出现在该应用程序的网络(即 JavaScript)版本中?您想提高此代码的性能,并在所有三个平台上共享它吗?
如果是这样的话,我认为 WebAssembly 值得考虑。您可以使用 C++ 创建一个在 iOS 和 Android 中本机运行的库,并通过 EmScripten 编译为 WebAssembly 以在 Web 上运行。
需要记住的一件事是 WebAssembly 没有内置 IO。因此,与代码的所有交互都必须跨越 JavaScript / WebAssembly 边界,这确实会产生惩罚。因此,这种方法最适合具有简单接口的算法,例如,它们可能对少量数据执行大量计算,然后返回结果。
我不确定您为什么考虑在 WebView 中运行它?对于 iOS 和 Android,您不需要使用 WebAssembly - 您可以本机运行 C++ 代码。
Bum*_*Kim -6
根据您的 C++ 库的用途,这可能是不可能的。
与 Web“Assembly”听起来相反,浏览器中的 WebAssembly 基本上是 JavaScript,因为它由 JS 引擎运行和管理。Wasm 运行在 WebView 提供的 JS 上下文中。所以WebView可以用来作为JS和Wasm之间的接口是不正确的。正确的说法是JS也运行Wasm。
这有一个巨大的含义:Wasm 无法访问本机 API,但可以访问 JS API。如果您的 C++ 代码需要本机 Android 服务(例如文件评估),则不应该使用 Wasm。
就性能而言,它还取决于您的 C++ 代码的作用。Wasm 的性能优势是通过不运行 JS 垃圾收集而不是通过本机运行来实现的。Wasm 目前无法运行 GPU、SIMD 或多线程(尽管这些功能将来会落地,但目前还没有)。
WebAssembly 最大的一点是将 C++/Rust/Go 等代码移植到 Web 浏览器,而不是提高性能。
目前已经有一些在 JS 引擎之外的原生平台上运行 Wasm 的努力,但还不成熟,距离在原生移动平台上运行还有很长的路要走。
| 归档时间: |
|
| 查看次数: |
6847 次 |
| 最近记录: |