为什么我构建了一个不会上传你的文件的文件转换器

发布: (2026年2月18日 GMT+8 15:18)
8 分钟阅读
原文: Dev.to

Source: Dev.to

抱歉,我目前无法访问外部链接获取文章内容。请您直接粘贴需要翻译的文本,我会帮您将其翻译成简体中文,并保留原有的格式、Markdown 语法以及技术术语。

云转换器的问题

我们都有过这种经历。你有一张需要转成 JPG 的 PNG 图片。你有一个需要转成 MP3 的 WAV 文件。或者你有一个需要转换成 YAML 的 JSON 文件。

你在谷歌上搜索。点击第一个结果:“免费在线转换器!”它要求你上传文件。

你犹豫了。

  • 也许那个文件是你的身份证扫描件。
  • 也许它是一份财务电子表格。
  • 也许它是一份机密的工作文档。
  • 或者它只是一张个人照片,你不想把它交给一个你甚至读不出所在司法辖区的随机服务器。

但你急需完成任务。于是你上传文件,等待进度条完成,下载结果,并希望“24 小时后删除”真的有效。

这种工作流已经出现问题。到了 2026 年,凭借我们浏览器中可用的计算能力,根本没有理由把一个 5 MB 的图像发送到半个地球之外的服务器,仅仅是为了更改文件格式。

这就是我创建 Sagasu Tools 的原因。

范式转变:本地优先的网络应用

Web 已经发展。它过去只是一个用于显示文本的哑终端。随后,它变成了一种向服务器发送表单的方式。

今天,浏览器已经成为一个功能完整的操作系统。

借助 WebAssembly (Wasm)Service WorkersFile System Access API 等技术,我们可以将桌面级的性能和隐私带入网络。

我在 tools.sagasu.art 的目标很简单:零服务器端处理

工作原理

当你访问传统的转换器网站时:

  • 客户端: 选择文件 → 上传(带宽成本 + 隐私风险)
  • 服务器: 接收文件 → 启动进程 → 转换(CPU 成本) → 保存临时文件
  • 客户端: 下载结果(带宽成本)

当你使用 Sagasu Tools 时:

  • 客户端: 选择文件 → 浏览器在本地处理 → 保存结果。

没有第 2 步。服务器只提供一次静态的 HTML/JS/Wasm 资源,然后不再干预。页面加载完毕后,你甚至可以关闭 Wi‑Fi,工具仍然可以正常工作。

Source:

引擎揭秘:FFmpeg.wasm 与伙伴们

如今许多媒体转换器的核心技术是 FFmpeg,它是音视频处理的瑞士军刀。

传统上,FFmpeg 在 Linux 服务器上运行。得益于 Emscripten 编译器工具链,我们可以把 FFmpeg 的 C 代码编译成 WebAssembly。

// Example: loading ffmpeg.wasm in a Web Worker
import { createFFmpeg, fetchFile } from '@ffmpeg/ffmpeg';
const ffmpeg = createFFmpeg({ log: true });
await ffmpeg.load();
await ffmpeg.write('input.mp4', await fetchFile(file));
await ffmpeg.run('-i', 'input.mp4', 'output.webm');
const data = ffmpeg.read('output.webm');

ffmpeg.wasm 让浏览器能够在 Web Worker 中直接运行 FFmpeg。这意味着当你在我的站点上转换视频时,CPU 风扇可能会转动,但网卡保持安静。数据始终停留在你的 RAM 中,永不离开。

好处

  • 隐私保护: 数据永不离开你的设备,因而不可能被拦截、存储或出售。设计上符合 GDPR,因为我的端没有任何数据处理
  • 速度: 对许多文件来说,上传和下载的时间比实际转换时间更长。对小文件而言,本地转换几乎是瞬间完成。
  • 成本: 我只托管静态文件(感谢 Cloudflare Pages),因此托管费用几乎为零,得以提供免费、无广告的工具。
  • 可靠性: 不会出现“服务器过载”错误。只要你的电脑能工作,工具就能正常使用。

客户端处理的挑战

这并非全是阳光和彩虹。构建本地优先的转换器会带来一些权衡。

1. 浏览器限制

浏览器对所有内容进行沙箱隔离。管理 WebAssembly 中的内存可能比较棘手。在 Chrome 中转换一个 4 GB 的视频可能会导致标签页崩溃,因为浏览器限制单个标签页可使用的 RAM。云服务器可以投入 128 GB 的内存来处理问题;而你的浏览器标签页大概只能得到 4 GB。

2. 初始加载时间

ffmpeg.wasm 核心体积较大(约 25 MB)。首次访问时下载会花费一些时间。

解决方案: 采用积极的缓存策略。访问一次后,Wasm 二进制文件会被存入缓存。后续访问即可瞬间加载。

3. 格式支持

虽然 FFmpeg 支持的格式非常丰富,但将 所有 编解码器编译成 Wasm 会导致文件体积膨胀。为了保持应用轻量,需要对要支持的格式进行选择。

超越媒体:单位转换、JSON 等

相同的本地‑优先哲学适用于 tools.sagasu.art 上的所有内容。

  • JSON 格式化工具: 为什么要把配置文件发送到服务器进行美化?在 JavaScript 中完成它。
  • Base64 编码器: 简单的字符串操作,根本不该触及后端。
  • 单位转换器: 纯数学。零延迟。

为什么这很重要

我们正看到一种向“厚客户端”回归的趋势。

  • 在1990年代,我们安装 .exe 文件。
  • 在2010年代,我们把一切迁移到云端(SaaS)。
  • 在2020年代,我们正回到边缘和客户端,但通过网页交付。

这种混合模型——网页分发,本地执行——是实用软件的未来。它将网站的无摩擦访问(无需安装)与桌面应用的隐私性和性能相结合。

我构建了这个转换器,因为我想自己使用它。我想要一个书签,点一下就能把文件拖进去并得到结果,而不必担心谁在查看我的数据。

如果这听起来正是你需要的,欢迎在 tools.sagasu.art 试一试。无需注册、无需上传、无需废话。只有工具。

0 浏览
Back to Blog

相关文章

阅读更多 »