前端怎么用 WebAssembly?从一个浏览器图片压缩工具说起
前端怎么用 WebAssembly?从一个浏览器图片压缩工具说起
做一个图片上传功能,最开始通常很简单:选文件,预览,调接口。需求慢慢加上来,事情就变了。图片太大,要先压一压;格式不统一,希望转成 WebP;用户还想拖动质量滑杆,看清楚压完的效果再上传。
这些工作当然可以交给服务端。但如果图片就在用户电脑里,处理完只需要一个文件,也可以把这一段留在浏览器里完成。页面负责交互,浏览器负责读图,编码库负责生成新的图片。
WebAssembly 就可以出现在这里。对前端开发者来说,日常接触它的入口往往是一个 npm 包:安装、导入、异步调用,然后把返回的数据接回页面。我们关心的是这段能力怎么进入现有项目,以及用户点下按钮后,页面能不能一直好好响应。
这篇文章用 JavaScript + Vite + Web Worker 做一个本地图片转 WebP 的小工具。Wasm 编码器使用现成的 @jsquash/webp,整个案例只写前端代码。

截图使用的是内置生成的 PNG 示例,显示的体积和耗时只对应这一次处理。