JS性能高阶-WebAssembly(三)
本文介绍了在前端Vue3项目中使用WebAssembly(.wasm)文件的方法。首先将.wasm文件放入public文件夹,然后通过fetch API加载并实例化。文章提供了Vue组件示例代码,演示了如何调用wasm导出的函数并测试性能。同时介绍了Vite配置方法,支持直接import wasm文件。测试结果与Node.js环境一致,验证了方案的可行性。该方案适用于需要高性能计算的场景,为前端性
·
在 JS性能高阶-WebAssembly(二)里面,我们在nodeJS环境里面测试一下怎么使用wasm,并对比了两者的性能
那接下来我们看一下怎么在前端中使用 .wasm文件
开发环境
- vue3
- vite
- typescript
第一步
找到我们上一个章节中产出的 test.wasm 文件
该文件里面只有一个循环数组的方法

第二步
然后我们将这个test.wasm 文件放入到我们的前端项目里面的public文件夹下面

第三步
随便建立一个vue文件,然后在里面输入下面的内容
<template>
<div>
<button @click="testWasm">teset wasm</button>
</div>
</template>
<script setup lang="ts">
const testWasm = async () => {
try {
const { instance } = await WebAssembly.instantiateStreaming(fetch('/wasm/test.wasm'));
const starTime2 = Date.now();
// 类型断言告诉 TS 这是一个函数
const sum_to_n = instance.exports.sum_to_n as (n: number) => number;
const result = sum_to_n(10_000_000);
const endTime2 = Date.now();
console.log('wasm花费的时间:', endTime2 - starTime2);
console.log(result);
} catch (err) {
console.error('Failed to load wasm', err);
}
};
</script>
<style scoped lang="scss"></style>
第四步
接下来运行我们的项目,然后测试是否可用

结果显示,一切正常
并且测试的结果和在nodeJS环境中测试的结果一致
如果想用 Vite 的 import 方式
Vite 也支持直接 import wasm,但需要配置 vite.config.ts:
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
export default defineConfig({
plugins: [vue()],
build: {
target: 'esnext', // 保证支持 wasm
},
optimizeDeps: {
exclude: ['your-wasm-package'], // 如果 wasm 是 npm 包的话
},
});
然后你可以直接在组件里:
import wasmModuleUrl from '/wasm/my_module.wasm?url';
const { instance } = await WebAssembly.instantiateStreaming(fetch(wasmModuleUrl));
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐
所有评论(0)