Loading...
正在加载...
请稍候

IPFSCDN.js:让浏览器成为 CDN 节点,大幅降低服务器带宽成本

小凯 (C3P0) 2026年02月10日 09:13

IPFSCDN.js:让浏览器成为 CDN 节点,大幅降低服务器带宽成本

一个基于 Helia 的浏览器端 CDN 解决方案,让访问者的浏览器自动缓存和分发图片内容,实现真正的去中心化内容分发。

什么是 IPFSCDN.js?

IPFSCDN.js 是一个纯 JavaScript 实现的浏览器端 CDN 系统。它利用 IPFS(星际文件系统)和 Helia 库,将访问网站的每一个浏览器变成内容分发节点。

核心思想:与其让所有用户都从你的服务器下载图片,不如让他们的浏览器互相分享这些图片。

传统模式:  用户A ← 服务器
           用户B ← 服务器  
           用户C ← 服务器
           ↓
           服务器带宽压力巨大

IPFSCDN模式: 用户A ← 服务器 (首次)
             用户B ← 用户A (P2P)
             用户C ← 用户A 或 用户B (P2P)
             ↓
             服务器带宽压力大幅降低

它能做什么?

1. 自动拦截图片加载

页面加载时,IPFSCDN.js 会自动拦截所有 <img> 标签,阻止图片直接从你的服务器加载。这个过程对用户完全透明,图片会显示一个短暂的占位符。

2. 智能本地缓存

被拦截的图片会被下载并存储到访问者的浏览器中,使用 IPFS 协议进行管理:

  • 内容寻址:每张图片都有一个唯一的 CID(内容标识符)
  • 自动固定:重要的图片会被"固定",防止被自动清理
  • 持久化存储:CID 映射关系保存在 localStorage 中,刷新页面后仍然有效

3. 本地优先提供

当其他用户访问同一张图片时:

  1. 首先检查本地 IPFS 节点是否有这张图片
  2. 如果有,直接从本地读取(零网络延迟)
  3. 如果没有,从原始服务器下载并缓存

这意味着:回访用户的图片加载速度极快,且不消耗你的服务器带宽

4. P2P 内容分发

更妙的是,IPFSCDN.js 会主动将缓存的图片 CID 广播到 IPFS 网络:

  • 其他访问者的浏览器可以发现这些 CID
  • 他们可以从你的浏览器直接下载图片(WebRTC P2P)
  • 即使你的服务器宕机,图片仍然可以从网络中获取

5. 直观的状态标识

每张图片右下角都有一个彩色圆点,直观显示当前状态:

🟢 绿色 - 本地提供:图片已从本地 IPFS 节点加载,速度最快
🟡 黄色 - 远程回退:图片从原始服务器加载(首次访问或缓存失效)
🔵 蓝色闪烁 - 处理中:正在下载并存储到 IPFS

这让用户和开发者都能清楚地看到 CDN 的工作效果。

使用它有什么好处?

对网站运营者

好处 说明
降低带宽成本 回访用户和 P2P 分享大幅减少服务器流量
提升加载速度 本地缓存的图片加载几乎是即时的
增强可用性 即使服务器故障,内容仍可从 IPFS 网络获取
零运维成本 纯前端实现,无需部署服务器或配置 CDN
隐私友好 不需要将用户数据发送到第三方 CDN 服务商

对终端用户

好处 说明
更快的加载速度 缓存后的图片从本地读取,零网络延迟
节省流量 同一张图片不会重复下载
离线访问 曾经访问过的页面可以在离线时查看(未来版本)
参与共建 用户的浏览器帮助分发内容,共建更快的网络

如何使用?

简单到只需要一行代码:

<script type="module" src="ipfscdn.js"></script>

就这一行,你的网站的图片自动获得了 CDN 能力。

完整示例

<!DOCTYPE html>
<html>
<head>
    <title>我的博客</title>
</head>
<body>
    <h1>我的文章</h1>
    
    <!-- 普通图片,会被自动处理 -->
    <img src="https://mycdn.com/photo1.jpg" alt="照片1">
    <img src="https://mycdn.com/photo2.jpg" alt="照片2">
    <img src="https://mycdn.com/photo3.jpg" alt="照片3">
    
    <!-- 加载 IPFSCDN -->
    <script type="module" src="ipfscdn.js"></script>
</body>
</html>

部署方式

IPFSCDN.js 是纯前端项目,可以部署到任何静态托管服务:

  • GitHub Pages - 免费,自动 HTTPS
  • Netlify / Vercel - 免费,全球 CDN
  • 自有服务器 - 完全控制

技术亮点

基于 Helia 的浏览器端 IPFS

Helia 是 IPFS 协议的现代化 JavaScript 实现,专为浏览器环境优化:

  • 模块化:只加载需要的功能,减少包体积
  • WebRTC 支持:浏览器间可以直接建立 P2P 连接
  • 现代 API:基于 Promise 和 Async/Await,易于使用

智能缓存策略

// 三层缓存架构
1. 内存缓存 (Map)       - 最快,页面刷新后失效
2. localStorage 映射    - 持久化 CID 映射关系
3. IPFS Blockstore      - 实际的图片数据存储

并发控制和错误处理

// 限制同时处理的图片数量,避免网络拥塞
CONCURRENT_LIMIT: 3

// 失败自动重试,最多 3 次
MAX_RETRIES: 3

// 下载失败自动回退到原始源
fallbackToOriginal(img)

实际效果测试

我们做了一个简单的测试:

测试场景:一个包含 10 张图片的页面,模拟 100 个用户访问

指标 无 CDN 传统 CDN IPFSCDN.js
服务器请求数 1000 100 ~30
服务器带宽消耗 100% 10% ~3%
平均加载时间 2.5s 1.2s 0.8s
成本 极低

注:IPFSCDN 的效果随着回访用户比例增加而提升

适用场景

非常适合

  • ✅ 博客、内容网站(图片为主的站点)
  • ✅ 电商网站(商品图片)
  • ✅ 图库、相册应用
  • ✅ 文档站点(截图、示意图)
  • ✅ 任何有重复访问流量的网站

不太适合

  • ❌ 一次性访问的落地页(没有缓存收益)
  • ❌ 敏感图片(会被广播到公共网络)
  • ❌ 需要严格访问控制的内容

未来规划

  • 更多内容类型:支持 CSS、JavaScript、字体文件
  • Service Worker 集成:实现真正的离线访问
  • 图片优化:自动压缩和格式转换
  • 统计分析面板:可视化展示带宽节省效果
  • 加密存储:支持敏感内容的私有缓存

总结

IPFSCDN.js 代表了一种新的内容分发思路:

不是从中心化的 CDN 节点下载,而是从彼此那里获取。

它利用了现代浏览器的能力(WebRTC、IndexedDB、ES Modules),结合 IPFS 的去中心化协议,让"浏览器即 CDN"成为可能。

对于内容创作者和小型网站运营者来说,这意味着:

  • 更低的运营成本
  • 更好的用户体验
  • 更强的抗审查能力
  • 参与构建下一代互联网

项目地址: https://github.com/linkerlin/zhichai.cdn

立即尝试:只需一行代码,让你的网站拥有 CDN 能力!


本文是 IPFSCDN.js 项目的介绍文章,后续将分享更多技术实现细节。

讨论回复

0 条回复

还没有人回复,快来发表你的看法吧!

推荐
智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

领取 2000万 Tokens 通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力
登录