后后记
shadertoy 能 60fps, WGPU 还是你大爷。
因为转化成了每个点各自并行。
bonus: 我发现了原参考书写错的地方.
为啥我能发现. 因为我把原书的落后工具用 glsl 实现了一遍, 提速 60 * 60 * 20 = 72000 倍.
落后工具需要 20 min 渲染全图, 我是即时出结果.
于是我就可以把测试集全跑一遍了.
最初写了个 牛顿迭代集,耗时 40s 渲染出结果。(和屏幕大小有关)
于是开始优化。(这个是优化到 13s 的成品)
减少封装的损耗
因为大量用了封装对象(自己写要么打开算(没有抽象,代码变一坨屎),要么自己封一层(那为啥不用内置的呢。
所以换一个封装很轻的 q5.js ,就提升了几倍的速度。
13s
改成 min.js
discord 有人提示用 min.js 版(默认版是开发环境的,报错很友好,但是速度慢,体积大)
30s
JS 写并行 + 读写锁
想到有很多 js 的在线处理工具,那它们怎么做到的呢?查了下
js parallel calculate
,发现有个 Web Worker。搜了一下找到个 demo, 优化到 2.5s
平时负载

并行时

经网友测试,win 下效果(运行了 3 次)

去掉锁
因为每个 pixel 是独立的,所以可以分 batch 后拿到结果后直接渲染,去掉了锁后,秒出。
不是 RIIR 也不是 JS 的方案
然后发现了
直接写 shader,惹不起惹不起。
后记
虽然 web worker 只能在浏览器里用,而且已经全支持了。
直接 RIIR 多好。
一些坑
遇到了
查了一下,发现可以 move 的对象是有限制的。