Hiệu năng IPFS: Tăng tốc truy xuất file với gateway

Kỹ thuật thực tế để cải thiện tốc độ truy xuất file IPFS: dedicated gateway, chiến lược cache, preloading và tích hợp CDN.

Nacho Collbởi Cập nhật: 7 phút đọc
Kỹ thuật thực tế để cải thiện tốc độ truy xuất file IPFS: dedicated gateway, chiến lược cache, preloading và tích hợp CDN.

“IPFS chậm” là một trong những phàn nàn phổ biến nhất của developer — và cũng là một trong những vấn đề dễ khắc phục nhất. Nguyên nhân hầu như luôn nằm ở phương thức truy cập, không phải bản thân giao thức. Hướng dẫn này trình bày bốn kỹ thuật loại bỏ độ trễ IPFS trong môi trường production.

IPFS Ninja

Tham chiếu nhanh: Phương thức truy cập IPFS theo tốc độ#

Phương thức truy cậpTTFB điển hìnhKhi nào dùng
Public gateway (ipfs.io, dweb.link)2–15 giâyChỉ dùng cho phát triển và kiểm thử
Dedicated gateway (nội dung đã pin)50–200 msToàn bộ traffic production
Dedicated gateway + CDN edge10–50 msNgười dùng toàn cầu
Endpoint tối ưu hóa ảnh<100 ms (warm)Toàn bộ nội dung hình ảnh

Nếu bạn đang dùng public gateway trong production, hãy chuyển sang dedicated gateway và phần lớn độ trễ sẽ biến mất ngay lập tức.

Tại sao public gateway chậm#

Public gateway thực hiện DHT (Distributed Hash Table) lookup với mỗi CID mà chúng chưa thấy gần đây. DHT lookup nghĩa là truy vấn hàng chục peer trong mạng để tìm ai đang lưu trữ nội dung — round-trip này mất 2–15 giây với cold request.

Ngay cả khi có cache hit, public gateway phục vụ hàng triệu người dùng. File bạn vừa pin có mức ưu tiên cache thấp và có thể bị đẩy ra giữa các request.

Giải pháp 1: Dedicated Gateway#

Dedicated gateway là riêng tư cho tài khoản của bạn. Các file bạn pin được cache trên gateway đó ngay lập tức — không có DHT lookup trên bất kỳ request nào, dù cold hay warm.

# Trước: public gateway, chậm và không ổn định
curl https://ipfs.io/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

# Sau: dedicated gateway, nhanh và ổn định
curl https://my-app.gw.ipfs.ninja/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

Tạo gateway trong dashboard IPFS.NINJA của bạn và đặt slug phù hợp với dự án. Slug gateway hỗ trợ chế độ truy cập hạn chế (cần token) hoặc chế độ mở cho static asset công khai.

Giải pháp 2: Pin khi ghi, không phải khi đọc#

Pin file ngay khi chúng được tạo để gateway có sẵn trước khi người dùng request. Request nhanh nhất là request không bao giờ gây ra cache miss.

# Upload và pin trong một bước
curl -X POST https://api.ipfs.ninja/upload/new \
  -H "X-Api-Key: bws_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4" \
  -H "Content-Type: application/json" \
  -d '{
    "content": {
      "data": "BASE64_ENCODED_CONTENT",
      "type": "image/png"
    },
    "description": "Product hero image v2"
  }'

# Response — lưu CID, dùng url ngay lập tức
# {
#   "cid": "bafy...",
#   "sizeMB": 0.24,
#   "uris": {
#     "ipfs": "ipfs://bafy...",
#     "url": "https://ipfs.ninja/ipfs/bafy..."
#   }
# }

Nếu bạn có CID hiện có từ node hoặc dịch vụ pinning khác, hãy pin lại mà không cần upload lại:

curl -X POST https://api.ipfs.ninja/pin \
  -H "X-Api-Key: bws_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4" \
  -H "Content-Type: application/json" \
  -d '{"cid": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"}'

Xem cách upload file lên IPFS để tham khảo đầy đủ API upload.

Giải pháp 3: CDN phía trước gateway#

Dedicated gateway phục vụ từ một region cố định. Nếu người dùng của bạn trải rộng nhiều châu lục, hãy thêm CDN edge layer để phục vụ từ điểm hiện diện gần nhất.

Vì IPFS dùng content-addressing — một CID nhất định luôn phân giải thành các byte giống hệt nhau — bạn có thể cache vĩnh viễn:

Cache-Control: public, max-age=31536000, immutable

Ví dụ với Cloudflare (gói miễn phí đủ cho hầu hết workload static asset):

  1. Thêm subdomain gateway của bạn (my-app.gw.ipfs.ninja) làm CNAME được proxy qua Cloudflare.
  2. Tạo Page Rule: my-app.gw.ipfs.ninja/ipfs/*Cache Everything, Edge Cache TTL: a month.
  3. Request đầu tiên đến gateway và được cache tại edge PoP gần nhất. Tất cả request tiếp theo được phục vụ từ Cloudflare.

Kết quả: TTFB toàn cầu giảm từ 50–200 ms xuống 10–50 ms.

Giải pháp 4: API tối ưu hóa ảnh#

Ảnh IPFS thô ở độ phân giải đầy đủ làm chậm trang và ảnh hưởng đến Core Web Vitals. Dùng endpoint tối ưu hóa ảnh để resize tại edge và phục vụ ở các định dạng hiện đại:

# Gốc (độ phân giải đầy đủ qua gateway)
https://my-app.gw.ipfs.ninja/ipfs/bafy...

# Resize xuống 800 px chiều rộng, chuyển sang WebP
https://api.ipfs.ninja/image/bafy...?w=800&format=webp

# Thumbnail vuông
https://api.ipfs.ninja/image/bafy...?w=200&h=200&fit=cover

Trong React:

function IPFSImage({ cid, width }) {
  return (
    <img
      src={`https://api.ipfs.ninja/image/${cid}?w=${width}&format=webp`}
      width={width}
      loading="lazy"
      decoding="async"
    />
  );
}

Endpoint tối ưu hóa cache mỗi tổ hợp (cid, width, format) — các request tiếp theo với cùng tham số bỏ qua hoàn toàn origin.

Checklist#

  • Chuyển từ public gateway sang dedicated gateway
  • Pin nội dung khi ghi (lúc upload), không phải khi đọc
  • Đặt Cache-Control: immutable trên response của gateway
  • Thêm CDN phía trước gateway cho traffic toàn cầu
  • Phục vụ ảnh qua endpoint tối ưu hóa thay vì URL gateway thô

Để hiểu thêm lý do tại sao pinning quan trọng cho tính sẵn sàng — không chỉ tốc độ — xem IPFS pinning là gì.


Sẵn sàng bắt đầu pin? Tạo tài khoản miễn phí — 50 file, 1 GB lưu trữ, 2 GB băng thông/tháng. Không cần thẻ tín dụng.

Về bài viết này: Bài viết này được soạn thảo bởi trợ lý AI sử dụng quy trình tạo nội dung của IPFS.NINJA, sau đó được Nacho Coll xem xét và phê duyệt. Tất cả ví dụ code đã được xác minh với API IPFS.NINJA trực tiếp. Nếu bạn phát hiện sai sót, vui lòng mở issue tại https://github.com/ipfs-ninja/feedback. Đọc thêm về cách chúng tôi sử dụng AI trong nội dung và gặp gỡ những người đứng sau IPFS.NINJA.

Nacho Coll

Về tác giả

Founder & Engineer at IPFS.NINJA

Nacho founded IPFS.NINJA to make content-addressed storage feel as simple as an S3 PUT — a single API call, a permanent CID, no wallets or peer discovery to reason about. Writes about IPFS internals, decentralized storage patterns, and the pinning-service landscape from the operator side of the wire.

Quay lại Blog

Bài viết liên quan