【发布时间】:2020-11-10 22:03:29
【问题描述】:
我有一个对启动时间非常敏感的应用程序,其中 html 内嵌了 JavaScript 以确保只发出一个请求。
我正在研究用 Rust/wasm 编写应用程序的部分内容,但我找不到任何描述如何内联 wasm 二进制文件的资源。
是否有可能以及我将如何去做?
【问题讨论】:
标签: browser webassembly
我有一个对启动时间非常敏感的应用程序,其中 html 内嵌了 JavaScript 以确保只发出一个请求。
我正在研究用 Rust/wasm 编写应用程序的部分内容,但我找不到任何描述如何内联 wasm 二进制文件的资源。
是否有可能以及我将如何去做?
【问题讨论】:
标签: browser webassembly
我可以将.wasm 文件转换为base64 并将其加载为ArrayBuffer。这将导致 30% 的文件大小损失
function _base64ToArrayBuffer(base64) {
var binary_string = window.atob(base64);
var len = binary_string.length;
var bytes = new Uint8Array(len);
for (var i = 0; i < len; i++) {
bytes[i] = binary_string.charCodeAt(i);
}
return bytes.buffer;
}
void async function main() {
const file = 'AGFzbQEAAAABCAJgAX8AYAAAAg8BB2NvbnNvbGUDbG9nAAADAgEBBxEBDWV4cG9ydGVkX2Z1bmMAAQoIAQYAQSoQAAsAFARuYW1lAQQBAAFpAgcCAAEAAAEA'
const bytes = _base64ToArrayBuffer(file)
const obj = await WebAssembly.instantiate(bytes, window)
obj.instance.exports.exported_func()
}()
【讨论】: