WebAssembly 如何驱动无需登录的免费浏览器工具

· nologin.tools

Hero image

Squoosh 能用堪比桌面应用的编解码器压缩你的图片,这和服务器算力毫无关系。压缩完全发生在你的浏览器标签页中,凭借一种叫做 WebAssembly 的技术。无需上传,无需账号,无需等待远程服务器处理你的文件后再传回来。

这改变了「免费浏览器工具」的含义。对很多工具来说都是如此。

WebAssembly 究竟是什么

WebAssembly(简称 Wasm)是一种二进制指令格式,能在浏览器中以远比 JavaScript 更接近原生代码的速度运行。WebAssembly 规范于 2019 年 12 月成为 W3C 标准,但浏览器支持出现得更早——Chrome 57、Firefox 52、Safari 11 和 Edge 16 都在 2017 年发布了 Wasm 支持。

关键是:Wasm 不是一种编程语言,而是一个编译目标。你用 C、C++、Rust 或 Go 写代码,编译成 .wasm 二进制文件,然后发给浏览器。浏览器直接运行它,无需解释 JavaScript,也无需联系服务器。

性能差距是真实的。基准测试持续显示 Wasm 比等效原生代码慢约 10-20%——听起来有些差距,但与 JavaScript 相比就不一样了:某些操作下 JavaScript 比原生代码慢 5-10 倍。对于计算密集型工作(图像编码、音频处理、加密、数据库查询),Wasm 缩小了浏览器能做的事情与桌面应用能做的事情之间的差距。

2022 年引入的 WebAssembly SIMD(单指令多数据)指令进一步缩小了这个差距。SIMD 让 Wasm 能使用 CPU 向量操作进行并行数据处理——这是让桌面图像工具运行快速的同类优化。Squoosh 在浏览器支持时会使用 SIMD,不支持时则优雅降级。

为何这对无需注册的工具如此重要

这里有一个联系,业界花了一段时间才明确说出来:服务端处理是要求用户账号的主要理由之一。

当工具在服务器上处理你的文件时,服务需要追踪什么属于谁。会话管理、文件存储、任务队列——所有这些都需要身份标识。而身份标识意味着账号、邮箱和密码。

当计算移到浏览器端,这个依赖就消失了。你的文件永远不离开你的电脑。没有需要追踪的任务,没有与你的使用量成比例的服务器成本,没有必要将请求与任何身份关联。

「浏览器就是操作系统」曾经是硅谷的陈词滥调。有了 WebAssembly,这正在成为关于你的浏览器实际上能计算什么的字面陈述。

基于 Wasm 构建的工具可以提供真正的无需登录、无需注册体验,因为它们真的不需要知道你是谁。计算发生在你的硬件上,在你的浏览器中,由你的 CPU 完成工作。开发者的服务器只是在提供一个静态文件,仅此而已。

已经在使用这项技术的工具——尽管没有大肆宣传

下面的大多数工具在首页上并没有提到「由 WebAssembly 驱动」。你只有通过开发者工具的网络标签才能知道——.wasm 文件会暴露它。但它们值得单独了解,因为每一款都展示了一类已经从服务器迁移到浏览器的工作。

Squoosh 是最典型的案例。Google 专门构建它来展示 Wasm 在图像压缩方面能做什么。打开它,拖入一张图片,你就可以用 MozJPEG、OxiPNG、WebP、AVIF 或 JPEG XL 编码——全都在本地运行。这些是用 C/C++ 编写、编译为 Wasm、在你的标签页中运行的库,正是桌面照片应用使用的编解码器。用 GIMP 加上导出插件搭建一套类似的环境需要完整的安装和配置;Squoosh 什么都不需要。

hat.sh 使用 libsodium——一个经过充分审计的 C 加密库,编译为 WebAssembly——来加密和解密文件。你的文件永远不会到达任何服务器。当你用 hat.sh 加密文件时,操作发生在浏览器标签页的内存中,只有加密后的输出才会写入你的磁盘。这才是加密工具的正确架构。把未加密的文件发到远程服务器再加密,那才本末倒置。

AudioMass 是一个完整的波形音频编辑器,无需账号或安装即可进行多轨编辑。音频处理确实是计算密集型的——滤波、变调、格式转换都需要真实的处理能力。这能在浏览器标签页中流畅运行,直接得益于 Wasm 带来的性能。几年前,「在线音频编辑器」意味着上传文件后等待。现在意味着在本地处理。

Datasette Lite 走得更远。它在你的浏览器中运行一个完整的 SQLite 数据库引擎——编译为 WebAssembly。你可以加载 CSV 或 SQLite 文件,对其运行真正的 SQL 查询,而无需任何东西触及服务器。这过去要么需要桌面数据库客户端,要么需要带账号的云数据库服务。现在只需要一个浏览器标签页。

一个值得关注的对比

这些工具的模式是一致的:

任务类别旧模式(服务端)Wasm 模式(客户端)
图像压缩上传 → 服务器编码 → 下载浏览器本地运行编解码器
文件加密发送到服务器 → 服务器加密 → 返回在内存中加密,从不上传
音频编辑上传音轨 → 云端处理 → 结果Web Audio + Wasm 在标签页处理
数据库查询托管数据库 → 账号 → API 调用SQLite 编译为 Wasm,本地运行
代码转换远程构建服务器编译器在浏览器标签页中运行

服务端处理制造了需要账号的理由。浏览器端 Wasm 处理消除了这些理由。上面的表格不是完整列表,而是一个方向。

经常被忽视的隐私角度

基于 Wasm 的工具有一个纯 JavaScript 工具往往没有的特定隐私属性:繁重的计算发生在沙盒环境中,没有跨越网络边界的副作用。

MDN Web 文档中关于 WebAssembly 的介绍 清楚地描述了安全模型:Wasm 模块在与 JavaScript 相同的沙盒中运行,没有额外权限。它们无法独立发出网络请求,无法读取任意文件,也无法在没有明确 JavaScript 互操作的情况下访问硬件。

这对隐私敏感工具的用户很重要。当 hat.sh 加密你的文件时,Wasm 模块在物理上无法通过网络发送该文件——模块本身没有网络访问权限。JavaScript 必须明确地上传它。开源工具可以被审计以确认这种情况没有发生,因为源代码是公开的。

对比那些「我们在服务器上处理一切,我们不保留日志」只是政策声明的工具——你只是在相信一家有自己商业利益的公司。

CyberChef——由 GCHQ 构建的用于编码、解码和加密操作的浏览器工具——是很好的说明当前状态的例子。它处理数百种操作(base64、AES、SHA 哈希、二进制解析、数据格式转换),完全不涉及服务器。这些正是以前需要运行附带账号系统的专用后端基础设施的操作。

无需注册。无需登录。无需上传。

Wasm 目前还做不到什么

WebAssembly 有真实的局限性。它没有直接的 DOM 访问——Wasm 和 JavaScript 仍然通过桥接通信,这在 UI 密集型操作中增加了开销。文件系统访问受限于浏览器的文件系统访问 API,意味着读写本地文件是可以的,但无法进行任意系统级操作。对于真正大规模的操作(在大型数据集上训练机器学习模型,处理数百 GB 的数据),客户端计算仍然受到实际内存限制。

Wasm 历史上也没有内置垃圾回收——尽管 2023 年进入第 4 阶段的 WebAssembly GC 提案为 Kotlin 和 OCaml 等语言改变了这一点。线程支持存在(WebAssembly Threads),但需要特定的 HTTP 响应头(COOP 和 COEP),并非每个托管设置都能提供。

这些限制是真实的,但在缩小。Wasm 工具链比两年前更成熟——用于 C/C++ 的 Emscripten、用于 Rust 的 wasm-pack、用于 Go 的 TinyGo 都有活跃的社区和良好的文档。「对浏览器来说计算量太大」的边界在不断移动。

免登录工具品类正在发生什么

Photopea 无需任何账号即可处理 PSD、XCF 和 Sketch 文件。这类解析——读取复杂的二进制文件格式、处理图层合成、色彩空间管理——历史上是通过服务器路由文件的理由。现在它在浏览器标签页中运行。与需要 Photoshop 订阅和 Adobe 账号的 Web 应用不同,Photopea 即时加载,免费,无需注册。

过去的限制是:如果浏览器工具需要真正的计算能力,就必须回调服务器。Wasm 打破了这个限制。当限制被打破,「你需要账号才能使用这个」的理由对更广泛的工具集来说就变弱了。

这并不意味着每款工具都会成为免登录的免费浏览器工具。有些应用确实需要持久的服务端状态——跨设备的实时协作、云端同步,或者需要 GPU 集群的大规模 AI 推理。这些需求是真实的。但门槛在提高。能在浏览器标签页中免费、无需注册、良好完成的任务类别,比 2020 年更广泛了。

对于关心隐私的用户来说——尤其是当各地立法机构正在就数据收集展开立法博弈时——这是正确的方向。因为计算发生在你的设备上而无法收集你数据的工具,与承诺不收集却仍有能力这样做的工具,在本质上是不同的。

实际结论:如果你在需要账号的工具和无账号的浏览器端替代品之间做选择,浏览器端选项在能力上做出妥协的可能性,比五年前要小得多。在很多类别中,它反而是更好的工具。Wasm 是主要原因。

更多无需注册的免费浏览器工具还在不断涌现。底层技术持续变快,开发者工具链持续变得更易用。


nologin.tools 发现更多无需登录、无需账号的工具。