IPFS Performansı: Gateway ile Dosya Alımını Hızlandırın

IPFS dosya alım hızını artırmak için pratik teknikler: özel gateway'ler, önbellekleme stratejileri, ön yükleme ve CDN entegrasyonu.

Nacho Collyazan Güncelleme: 5 dk okuma
IPFS dosya alım hızını artırmak için pratik teknikler: özel gateway'ler, önbellekleme stratejileri, ön yükleme ve CDN entegrasyonu.
Özet
  • IPFS gecikmesini saniyelerden 200 ms'nin altına indirmek için genel gateway'leri özel bir gateway ile değiştirin.
  • Genel gateway'ler soğuk CID'lerde bir DHT araması çalıştırır ve içerik çözülmeden önce 2-15 saniye ekler.
  • Dosyaları okuma anında değil yazma anında pinleyin, böylece gateway ilk istekten önce onları zaten elinde bulundurur.
  • Özel bir gateway'i bir CDN ucuyla eşleştirerek küresel IPFS gecikmesini 10-50 ms'ye indirin.

“IPFS yavaş” geliştiricilerin en sık dile getirdiği şikayetlerden biri — ve aynı zamanda en kolay çözülebilen sorunlardan biri. Suçlu neredeyse her zaman erişim yöntemidir, protokolün kendisi değil. Bu kılavuz, production ortamında IPFS gecikmesini ortadan kaldıran dört tekniği kapsamaktadır.

IPFS Ninja

Hıza Göre IPFS Erişim Yönteminizi Seçin#

Erişim yöntemiTipik TTFBNe zaman kullanılır
Public gateway (ipfs.io, dweb.link)2–15 snYalnızca geliştirme ve test için
Özel gateway (pin’lenmiş içerik)50–200 msTüm production trafiği
Özel gateway + CDN edge10–50 msGlobal kullanıcı tabanı
Görüntü optimizasyon endpoint’i<100 ms (ılık)Tüm görüntü içeriği

Production’da public gateway kullanıyorsanız, özel bir gateway’e geçin ve gecikmenin büyük kısmı anında ortadan kalkar.

Public Gateway’ler Neden Yavaş?#

Public gateway’ler, yakın zamanda görmedikleri her CID için bir DHT (Distributed Hash Table) araması yapar. DHT araması, içeriği kimin tuttuğunu bulmak için ağ genelinde düzinelerce peer’e sorgulama yapmak anlamına gelir — bu gidiş-dönüş, soğuk bir istekte 2–15 saniye sürer.

Cache isabetinde bile, public gateway’ler milyonlarca kullanıcıya hizmet eder. Yakın zamanda pin’lediğiniz dosyanın cache önceliği düşüktür ve istekler arasında silinebilir.

Çözüm 1: Özel Gateway#

Özel gateway, hesabınıza özeldir. Pin’lediğiniz dosyalar o gateway’de hemen önbelleğe alınır — soğuk veya ılık, hiçbir istekte DHT araması yapılmaz.

# Önce: public gateway, yavaş ve güvenilmez
curl https://ipfs.io/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

# Sonra: özel gateway, hızlı ve deterministik
curl https://my-app.gw.ipfs.ninja/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

IPFS.NINJA dashboard’unuzda bir gateway oluşturun ve slug’ı projenizle eşleşecek şekilde ayarlayın. Gateway slug’ları kısıtlı erişim modunu (token gerekli) veya public statik varlıklar için açık modu destekler.

Çözüm 2: Yazma Zamanında Pin’leyin, Okuma Zamanında Değil#

Dosyaları oluşturulduğu anda pin’leyin ki gateway’in herhangi bir kullanıcı istemeden önce bunlara sahip olsun. En hızlı istek, hiçbir zaman cache miss’e neden olmayan istektir.

# Tek adımda yükleme ve pin'leme
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"
  }'

# Yanıt — CID'yi saklayın, url'yi hemen sunun
# {
#   "cid": "bafy...",
#   "sizeMB": 0.24,
#   "uris": {
#     "ipfs": "ipfs://bafy...",
#     "url": "https://ipfs.ninja/ipfs/bafy..."
#   }
# }

Başka bir node veya pin’leme hizmetinden mevcut CID’leriniz varsa, yeniden yüklemeden yeniden pin’leyin:

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

Tam yükleme API referansı için IPFS’e dosya nasıl yüklenir bölümüne bakın.

Çözüm 3: Gateway’inizin Önüne CDN Ekleyin#

Özel gateway’ler sabit bir bölgeden hizmet verir. Kullanıcılarınız kıtalara yayılmışsa, en yakın varlık noktasından hizmet vermek için bir CDN edge katmanı ekleyin.

IPFS içerik adresli olduğundan — belirli bir CID her zaman aynı byte’lara çözümlenir — sonsuza kadar önbelleğe alabilirsiniz:

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

Cloudflare örneği (ücretsiz katman çoğu statik varlık iş yükünü karşılar):

  1. Gateway alt alan adınızı (my-app.gw.ipfs.ninja) Cloudflare proxied CNAME olarak ekleyin.
  2. Bir Page Rule oluşturun: my-app.gw.ipfs.ninja/ipfs/*Cache Everything, Edge Cache TTL: bir ay.
  3. İlk istek gateway’e çarpar ve en yakın edge PoP’ta önbelleğe alınır. Sonraki tüm istekler Cloudflare’den sunulur.

Sonuç: global TTFB 50–200 ms’den 10–50 ms’ye düşer.

Çözüm 4: Görüntü Optimizasyon API’si#

Tam çözünürlükte sunulan ham IPFS görüntüleri sayfaları yavaşlatır ve Core Web Vitals’a zarar verir. Edge’de yeniden boyutlandırmak ve modern formatlar sunmak için görüntü optimizasyon endpoint’ini kullanın:

# Orijinal (gateway üzerinden tam çözünürlük)
https://my-app.gw.ipfs.ninja/ipfs/bafy...

# 800 px genişliğe yeniden boyutlandırıldı, WebP'ye dönüştürüldü
https://api.ipfs.ninja/image/bafy...?w=800&format=webp

# Kare küçük resim
https://api.ipfs.ninja/image/bafy...?w=200&h=200&fit=cover

React’ta:

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

Optimizasyon endpoint’i her (cid, width, format) kombinasyonunu önbelleğe alır — aynı parametrelerle yapılan sonraki istekler origin’i tamamen atlar.

Kontrol Listesi#

  • Public gateway’lerden özel gateway’e geçin
  • İçeriği okuma zamanında değil, yazma zamanında (yüklemede) pin’leyin
  • Gateway yanıtlarında Cache-Control: immutable ayarlayın
  • Global trafik için gateway’in önüne CDN ekleyin
  • Görüntüleri ham gateway URL’leri yerine optimizasyon endpoint’i üzerinden sunun

Pin’lemenin yalnızca hız için değil, kullanılabilirlik için de neden önemli olduğuna dair arka plan bilgisi için IPFS pin’leme nedir bölümüne bakın.


Pin’lemeye başlamaya hazır mısınız? Ücretsiz hesap oluşturun — 50 dosya, 1 GB depolama, 2 GB bant genişliği/ay. Kredi kartı gerekmez.

Bu makale hakkında: Bu makale, IPFS.NINJA’nın içerik oluşturma iş akışı kullanılarak bir AI asistanı tarafından taslak olarak hazırlandı, ardından Nacho Coll tarafından incelendi ve onaylandı. Tüm kod örnekleri canlı IPFS.NINJA API’sine karşı doğrulandı. Bir yanlışlık fark ederseniz lütfen https://github.com/ipfs-ninja/feedback adresinde bir sorun bildirin. İçeriğimizde AI’yi nasıl kullandığımız hakkında daha fazla bilgi edinin ve IPFS.NINJA’nın arkasındaki insanlarla tanışın.

Nacho Coll

Yazar hakkında

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.

Blog'a Dön

İlgili Yazılar