前言
刚接触Rust wasm,请各看官高抬贵手。
简介
根据网上资料,使用 wasm-pack
搭配wasm-bindgen
将Rust代码编译成 wasm。
搭好环境后,想对比一下rust-wasm与js的性能差距。
- 环境
- OS: Deepin 20.7.1 apricot
- Kernel: Linux 5.15.34
- CPU: Intel Core m3-7Y30 @ 4x 2.6GHz
- RAM: 4GB
- 浏览器: Microsoft Edge 版本 107.0.1418.35 (正式版本) (64 位)
- Rust 依赖
- rustc 1.60.0
- wasm-bindgen: 0.2
方案:计算素数
Rust 函数
#[wasm_bindgen]
pub fn cpu_calc(count: i32) {
let mut result = 1;
// 计算多少数字下
for i in 2..count {
let num: f64 = i as f64;
let after_sqrt = num.sqrt() as i32 + 1;
let mut flag = true;
for j in 2..after_sqrt {
let dividing = i % j;
if dividing == 0 {
flag = false;
break;
}
}
if flag {
result = i;
}
}
// 调用浏览器控制台打印
console_log(&format!("rust 素数:{}", result));
}
JS 函数
function cpuCalc(num) {
let result = 0;
for (let i = 2; i < num; i++) {
let flag = true;
for (let j = 2; j < Math.sqrt(i); j++) {
if (i % j === 0) {
flag = false;
break;
}
}
if (flag) {
result = i;
}
}
console.log('js素数:', result);
}
之后通过js分别调用这两个方法,进行1,000,0000 (100w) 以内的质数计算。并打印最大的质数。
结果
多刷新页面几次,等耗时看起来基本稳定。
先运行wasm方法,再执行js方法。
先执行js方法,再执行wasm方法。
小结
计算性能和js基本差不多。
而调用wasm 的时候也是同步的代码。
看来js对于处理的cpu计算任务性能还是可以的。
但是总觉得应该wasm更快一点的。
那wasm在什么场景下比js具有优势呢,这个还需要继续深入。
PS:Rust wasm慢是我代码写的有问题吗?