资讯同步 on Nostr: #V2EX ### [程序员] 40 ...
#V2EX
### [程序员] 40 了被毕业,为了养家糊口决定弄了个浏览器端图片压缩站,求 V 友挑刺
今年 40+,上半年被毕业了。
在家待了阵子,投出去的简历大多石沉大海——这个年纪,厂里不怎么缺写业务代码的。想明白一件事:与其继续挤那扇快关上的门,不如自己弄点东西,哪怕小。
决定做**出海 SaaS**。理由很朴素:国内流量太贵、太卷,而我英语还行,产品在海外自己能说清。选「图片压缩」这个切入点,是因为它刚需、高频、而且我能做出差异化——**全程在浏览器里跑,图片不上传服务器**。隐私这个点,海外用户比国内在意得多。
---
### 开发过程(踩坑比功能多)
框架定的是 Rust 编译成 WASM 做压缩核心,前端 React + Vite SSG 。真正动手才知道坑有多深,随手记几个:
**1. 跨源隔离( COI )是个双刃剑**
为了开压缩多线程加速,得开 `Cross-Origin-Isolation`。9-2 那天终于开起来了,速度确实上来了,但 Google 登录直接挂——后来查到是 `COEP` 把登录用的 iframe 拦死了,又改回弹窗授权流程(`f3d7ce4`)。
**2. OAuth 登录死磕了一整天**
9-3 基本都在跟 Google / X 的登录较劲。FedCM 、COEP 、opener 被切断……X 的弹窗回跳因为 `opener` 变 null ,postMessage 根本传不回来,最后统一改成 cookie 回传 + 主站轮询(`3353c80`)。这种坑文档几乎不写,全靠真机一步一步试。
**3. 凌晨炸了个 P0**
9-4 半夜全站压缩崩溃。根因很隐蔽:多线程 WASM 包在 COI+COEP 下,嵌套的 rayon worker 被 `COEP` 拦死。回滚方案是**默认路径绝不自动加载线程包**,只有用户显式开 Turbo 才加载(`569731d`)。这次事故我写了份复盘报告,后面打算发出来。
**4. AI 增强差点劝退**
接了 ONNX Runtime Web 做去背景/降噪,结果模型加载永久卡死。最后是强制 `ORT numThreads=1` 才稳住(`5384544`)——WebGPU 这条路在 Safari 上至今还是 legacy 1.17 保命。
**5. SEO 是后补的课**
铺了 234 个本地化长尾落地页( SSG ),结果 hydration 把服务端渲染的 `<title>` 覆盖了,导致收录卡住,又回过头修(`fea7368`)。9-4 加了一堆站长验证文件( Bing / 百度 / IndexNow ),才刚起步。
顺手把前端架构开源了( zipo-frontend ,MIT ),反正核心压缩是 WASM 闭源,开源出去的不影响:<
https://github.com/fusion-foo/zipo-frontend>
---
### 现在的状态
站点上线了:\*\*<
https://zipo.pics>\*\*
功能:JPG / PNG / WebP / AVIF 压缩,AI 去背景、降噪、水印,批量导出。卖点是「文件不出浏览器」。
但一个人测试总归有盲区——不同浏览器、不同机型、不同网络下的表现,我有数不清没覆盖到的地方。
https://www.v2ex.com/t/1239602#reply0Published at
2026-09-04 17:14:42 UTCEvent JSON
{
"id": "d5041dd2d327a63a4fcf662665044933a58eecd4e3d0f20f7cc543d1804e1a86",
"pubkey": "2d0154e14033e848b448a971322bfbf4e04a29c377012ee0f5ab66099b56f1ad",
"created_at": 1788542082,
"kind": 1,
"tags": [
[
"t",
"v2ex"
]
],
"content": "#V2EX\n### [程序员] 40 了被毕业,为了养家糊口决定弄了个浏览器端图片压缩站,求 V 友挑刺\n\n今年 40+,上半年被毕业了。\n\n在家待了阵子,投出去的简历大多石沉大海——这个年纪,厂里不怎么缺写业务代码的。想明白一件事:与其继续挤那扇快关上的门,不如自己弄点东西,哪怕小。\n\n决定做**出海 SaaS**。理由很朴素:国内流量太贵、太卷,而我英语还行,产品在海外自己能说清。选「图片压缩」这个切入点,是因为它刚需、高频、而且我能做出差异化——**全程在浏览器里跑,图片不上传服务器**。隐私这个点,海外用户比国内在意得多。\n\n---\n\n### 开发过程(踩坑比功能多)\n\n框架定的是 Rust 编译成 WASM 做压缩核心,前端 React + Vite SSG 。真正动手才知道坑有多深,随手记几个:\n\n**1. 跨源隔离( COI )是个双刃剑** \n为了开压缩多线程加速,得开 `Cross-Origin-Isolation`。9-2 那天终于开起来了,速度确实上来了,但 Google 登录直接挂——后来查到是 `COEP` 把登录用的 iframe 拦死了,又改回弹窗授权流程(`f3d7ce4`)。\n\n**2. OAuth 登录死磕了一整天** \n9-3 基本都在跟 Google / X 的登录较劲。FedCM 、COEP 、opener 被切断……X 的弹窗回跳因为 `opener` 变 null ,postMessage 根本传不回来,最后统一改成 cookie 回传 + 主站轮询(`3353c80`)。这种坑文档几乎不写,全靠真机一步一步试。\n\n**3. 凌晨炸了个 P0** \n9-4 半夜全站压缩崩溃。根因很隐蔽:多线程 WASM 包在 COI+COEP 下,嵌套的 rayon worker 被 `COEP` 拦死。回滚方案是**默认路径绝不自动加载线程包**,只有用户显式开 Turbo 才加载(`569731d`)。这次事故我写了份复盘报告,后面打算发出来。\n\n**4. AI 增强差点劝退** \n接了 ONNX Runtime Web 做去背景/降噪,结果模型加载永久卡死。最后是强制 `ORT numThreads=1` 才稳住(`5384544`)——WebGPU 这条路在 Safari 上至今还是 legacy 1.17 保命。\n\n**5. SEO 是后补的课** \n铺了 234 个本地化长尾落地页( SSG ),结果 hydration 把服务端渲染的 `\u003ctitle\u003e` 覆盖了,导致收录卡住,又回过头修(`fea7368`)。9-4 加了一堆站长验证文件( Bing / 百度 / IndexNow ),才刚起步。\n\n顺手把前端架构开源了( zipo-frontend ,MIT ),反正核心压缩是 WASM 闭源,开源出去的不影响:\u003chttps://github.com/fusion-foo/zipo-frontend\u003e\n\n---\n\n### 现在的状态\n\n站点上线了:\\*\\*\u003chttps://zipo.pics\u003e\\*\\*\n\n功能:JPG / PNG / WebP / AVIF 压缩,AI 去背景、降噪、水印,批量导出。卖点是「文件不出浏览器」。\n\n但一个人测试总归有盲区——不同浏览器、不同机型、不同网络下的表现,我有数不清没覆盖到的地方。\nhttps://www.v2ex.com/t/1239602#reply0",
"sig": "82acf4b02280fc4b037c9621ede7be34ff7aaf8e1c5c9bb9b7376c1bff3d376ad1fa163eae109f33ae8937524b173237298e660f00dff0da72258395d8052643"
}