[讨论] 有公司使用到WASM技术了吗?

楼主: erspicu (.)   2024-07-02 01:51:58
只是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物件使用移除掉了
作者: ohmylove347 (米特巴爾)   2024-07-02 01:55:00
https://squoosh.app/要不要参考这个项目,好像是谷歌写的PWA,也是压缩图片影片之类的,还能安装在本地的样子,或许跟你的专案有相似的地方
作者: GoalBased (Artificail Intelligence)   2024-07-02 03:33:00
compress.js, pica, browser-image-compression
作者: oopFoo (3d)   2024-07-02 06:17:00
你知道wasm跟js是怎么互相call?资料怎么传?你这个要搞清楚。wasmGC是用来解决一部份这类的问题。wasm你需要管理内存,不然光是copy就吃掉一堆效能。而且wasm的compiler本来就比java/c#差很多,效能差是正常的。所以不用c/c++或直接wasm assembly,还要规划好资料的传递,不然根本直接js+typedarray就好了。js的效能是非常好的,不要有错误的观念。所以除非你的wasm程式规划的很好,不然比js差是正常的。c#除非移植到wasmGC,不然高效能是很难的。https://web.dev/case-studies/google-sheets-wasmgc
作者: takasaki (小七8号)   2024-07-02 06:39:00
问过safari用户了吗?相容性搞死你
作者: oopFoo (3d)   2024-07-02 06:46:00
webgl/glsl来跑lanczos是最快,最简单,相容性最好的方法webgl/glsl处理影像容易,程式也容易,只是入门难而已。https://stackoverflow.com/questions/54299457从这篇追回去,你大概就知道怎么做了
作者: neo5277 (I am an agent of chaos)   2024-07-02 13:50:00
推一个实作精神
作者: testPtt (测试)   2024-07-02 15:38:00
Blazor就容易上手 没有容易的框架这是wasm主要的门槛
作者: keel90135 (尼可)   2024-07-02 19:23:00
支援度没办法全部就没法正式上线 只能当玩具上线一堆奇怪手机浏览器直接搞死你
作者: guanting886 (Guanting)   2024-07-02 19:25:00
就稍微可以用client端摊原本server端要做的运算然后有些运算可能javascript算得比wasm还快就当作玩具 什么时候还有机会要用不知道 影片编码就算了 速度真的不行
作者: Killercat (杀人猫™)   2024-07-02 23:33:00
有几个crypto project就是用wasm部署到用户client让用户的浏览器可以做一些链操作https://tinyurl.com/2mdzga63 Tezos就是一个例子
作者: TakiDog (多奇狗)   2024-07-04 18:26:00
ffmpeg 可以简单做些操作
作者: s25g5d4 (function(){})()   2024-07-05 15:17:00
曾经做过 WASM 插进 envoy 里当作 microservice sidecarfilter另外一个神级 WASM 应用范例是 Figma
作者: abccbaandy (敏)   2024-07-06 02:12:00
Figma有很神吗? 启动慢到想到当年的java applet

Links booklink

Contact Us: admin [ a t ] ucptt.com