javascript - Web 组装速度与 js 等效
问题描述
我正在尝试快速渲染 Mandelbrot 集,所以我重新制作了 Web 汇编中的计算函数,认为它会更快但速度相同
(module
(func (export "getcolorj") (param f64 f64 f64 f64) (result i32) (local f64 f64 i32 f64 f64)
local.get 0
local.set 4;;cx=x
local.get 1
local.set 5;;ci=i
i32.const 0
local.set 6;;i3=0
(block
(loop
local.get 4
local.get 4
f64.mul
local.get 5
local.get 5
f64.mul
f64.sub
local.set 7;;const temp=cx**2-ci**2
local.get 4
local.get 5
f64.mul
f64.const 2
f64.mul
local.get 3
f64.add
local.set 5;;ci=cx*ci*2+i
local.get 7
local.get 2
f64.add
local.set 4;;cx=temp+x
local.get 4
local.get 4
f64.mul
local.get 5
local.get 5
f64.mul
f64.add
local.set 7;;(cx**2+ci**2)
local.get 6
i32.const 1
i32.add
local.set 6;;i3++
(i32.eq (local.get 6) (i32.const 100))
(f64.gt (local.get 7) (f64.const 4))
i32.add
(i32.ne (i32.const 0))
br_if 1
(br 0)
)
)
local.get 6
i32.const -1
i32.add
)
)
对比
function getcolorj(x,i,juliusx,juliusi,deap){
var cx= x
var ci= i
var i3=0
for("";i3<deap;i3++){
const temp=cx**2-ci**2
ci=cx*ci*2+juliusi
cx=temp+juliusx
if((cx**2+ci**2)>4){break;}
}
return i3
}
我不知道我做错了什么,或者如果事情就是这样,我只是让 Web 程序集很糟糕吗?这是我第一次尝试所以如果是这样我不会太惊讶
JIC 我是如何开始的很重要:
WebAssembly.instantiateStreaming(fetch('test.wasm'), {})
.then(results => {
console.log()
getcolorj=results.instance.exports.getcolorj
});
顺便说一句,为了质量,我正在做 10,000 次交互,是的,在渲染黑色部分时,两者都会减慢速度。
解决方案
在大多数实际应用程序中,WebAssembly 不会给你带来比 JavaScript 显着的速度提升,原因很简单,JavaScript 已经非常快了。
它将为您提供更可预测的运行时性能,并在将来访问诸如 SIMD 之类的功能,这些功能在某些情况下可能会提供更好的性能。
有关更多详细信息,请参阅此问题:
推荐阅读
- python - 如何使用 numpy 从 RTDose(3D 阵列)计算平均剂量和最大剂量?
- laravel - 以前的会话不能在 laravel 5.7 中销毁
- java - 连接消费者后未在 dynamo-db 中创建 KCL 租用表
- php - 将 PHP 函数的输出定向到变量并阻止屏幕输出
- python - 返回行中 3 个最高值的列名
- python - 如何使用openpyxl和python3为excel工作表中的一系列单元格(列和行)赋予字体颜色?
- ssis - 使用 Simba odbc 驱动程序从 SSIS 调用 BigQuery 存储过程时出错
- c# - C# 如何将 \uxxxx 转换为纯文本(十六进制转义序列)
- python - 从字符串中提取整数
- angular - Angular 路由器:使用查询参数时未找到 URL 段