只是sideproject需求 想说wasm出来也算几年了
撇开.NET的Blazor框架不谈 (是说转战Blazor的公司也不多的感觉)
目前好像看到wasm应用的机会不是很广
不是说它不厉害 而是到底要做什么方面的应用
当然我知道可以port c/c++其他语言到网页上 移植游戏
或是做一些比较需要高效能的运算等等 不过一般状况下好像就不知道怎样应用好
但我之前有一个构想 就是上传图片.缩图.压缩 或是上传影片
这些原来的设计多数是把档案原封不动上传到后端 再从后端排程处理
如果前端可以直接处理掉图片.影片的缩图与压缩 再把处理结果上传到后端
理论上可以减轻后端负担以及节省上传频宽资源
自己是想用这种方式来处理相簿上传照片的处理方式 所以稍微study实作了概念
https://github.com/erspicu/LanczosWasmDemo
Lanczos缩图法 大概是几年前我所知缩图品质比较好的方式 实作也不会太复杂
我自己用在x64 win11环境下测试用.net framework 最优化后
(用很c风格的指标处理方式+多核平行运算)
好比说4096*3072 缩到1600x1200 一张图计算大概都是100ms内 一瞬间的事情
原本参考这方式
https://koshian2.hatenablog.jp/entry/2017/11/23/212813
但这效能差 而且其实算出来的画面有些问题
想说效果很不错想把缩图算法移植到wasm功能上
刚好看到 https://tinyurl.com/mrm2r86r 这篇
可以用我比较熟悉的c#去做移植
但移植出来的成果运算速度差 .net framework在win11 x64上太多
可能有100倍以上差异 打个比方 90ms 变成 9秒
原本以为可以把c#编译成不需要仰赖.net虚拟机的方式跑
结果稍微看架构 好像是把.NET虚拟机在WASM实作然后去跑.NET PORT过去的东西
加上在浏览器WASM环境内 没有像直接跑在电脑上 有JIT优化
所以速度有差 (wasm虚拟机跑.net虚拟机跑.net cli 套娃...)
但不排除有再优化的可能性 像C#的Parallel.For
移植到WASM上后 其实并没有平行加速运算的实际效能...
给大家研究看看 (所以最后还是换成单纯循环)
C/C++ N年没相关工作经验写了 说不定C移植过去效能会好上非常多
我的专案就分享给对C#在WASM应用有兴趣的人参考
https://github.com/erspicu/LanczosWasmDemo
也希望加速的部分 可以分享解决方案
Parallel.For 也不知道实际移植过去到底是怎样
平行处理的部分可能用别方式置换掉
Web Worker或是webgpu不知道可不可行
最终我心中的理想应用场景 大概是使用者上传图片和影片
把缩图跟编码的工作丢给前端处理完上传
这大概是目前我想到还满好用通用的应用场景
ps.c#移植wasm,其实满多功能无效,编译器会提醒,
有些功能不然就要找别方案替代,不然就要自己实作,
所以也不是爽爽可以无痛把c#相关资源丢到前端上
牵涉到跟os依赖的部分 很多都不可用 看跳一堆警告
最后毅然把原本的bitmap物件使用移除掉了