小编Dr.*_*ght的帖子

对大量数据进行硬编码而不引起内存峰值

因此,我正在探索将 WebAssembly 存储在 JavaScript 文件中的概念,以便将其全部捆绑在一个可交付文件中。我确实设法制作了一个工作示例,它将 wasm 文件存储在 base64 的大文字字符串中,并在运行时转换为 Uint8Array,然后再处理为模块和实例。

await Deno.writeTextFile(
    './static/wasm/bundle.js',
    `import { initSync } from './app.js'\ninitSync(new WebAssembly.Module(Uint8Array.from(atob('${btoa(
        [ ...await Deno.readFile('./static/wasm/app_bg.wasm') ]
            .map(byte => String.fromCharCode(byte))
            .join('')
    )}').split('').map(char => char.charCodeAt(0)))))`
)
Run Code Online (Sandbox Code Playgroud)

上述片段的来源

但我一直想知道,在 wasm 文件非常大的情况下,JavaScript 在处理这个文字字符串时是否可能会出现问题。在此代码片段中,base64 文字字符串在开始时只需要一次,我想它会被垃圾收集器处理掉,因为它不再可访问。

我想知道人们是否对如何存储这种相同类型的数据有任何想法,这些数据硬编码在 JavaScript 中,它只运行一次,但不会在运行时开始时导致任何巨大的内存峰值。增加处理时间以减少峰值内存使用量是一个可以接受的权衡,但获取任何外部资源会破坏问题的重点。

javascript webassembly deno

14
推荐指数
1
解决办法
736
查看次数

标签 统计

deno ×1

javascript ×1

webassembly ×1