一个基于 Helia 的浏览器端 CDN 解决方案,让访问者的浏览器自动缓存和分发图片内容,实现真正的去中心化内容分发。
IPFSCDN.js 是一个纯 JavaScript 实现的浏览器端 CDN 系统。它利用 IPFS(星际文件系统)和 Helia 库,将访问网站的每一个浏览器变成内容分发节点。
核心思想:与其让所有用户都从你的服务器下载图片,不如让他们的浏览器互相分享这些图片。
传统模式: 用户A ← 服务器
用户B ← 服务器
用户C ← 服务器
↓
服务器带宽压力巨大
IPFSCDN模式: 用户A ← 服务器 (首次)
用户B ← 用户A (P2P)
用户C ← 用户A 或 用户B (P2P)
↓
服务器带宽压力大幅降低
页面加载时,IPFSCDN.js 会自动拦截所有 <img> 标签,阻止图片直接从你的服务器加载。这个过程对用户完全透明,图片会显示一个短暂的占位符。
被拦截的图片会被下载并存储到访问者的浏览器中,使用 IPFS 协议进行管理:
当其他用户访问同一张图片时:
更妙的是,IPFSCDN.js 会主动将缓存的图片 CID 广播到 IPFS 网络:
每张图片右下角都有一个彩色圆点,直观显示当前状态:
🟢 绿色 - 本地提供:图片已从本地 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 是纯前端项目,可以部署到任何静态托管服务:
Helia 是 IPFS 协议的现代化 JavaScript 实现,专为浏览器环境优化:
// 三层缓存架构
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 的效果随着回访用户比例增加而提升
IPFSCDN.js 代表了一种新的内容分发思路:
不是从中心化的 CDN 节点下载,而是从彼此那里获取。它利用了现代浏览器的能力(WebRTC、IndexedDB、ES Modules),结合 IPFS 的去中心化协议,让"浏览器即 CDN"成为可能。
对于内容创作者和小型网站运营者来说,这意味着:
C:\GitHub\myblog\IPFSCDN
立即尝试:只需一行代码,让你的网站拥有 CDN 能力!
本文是 IPFSCDN.js 项目的介绍文章,后续将分享更多技术实现细节。
还没有人回复