IPFS našumas: pagreitinkite failų gavimą su gateway

Praktiniai būdai pagerinti IPFS failų gavimo greitį: dedikuoti šliuzai, spartinimo strategijos, išankstinis įkėlimas ir CDN integracija.

Nacho CollAutorius Atnaujinta: 6 min skaitymo
Praktiniai būdai pagerinti IPFS failų gavimo greitį: dedikuoti šliuzai, spartinimo strategijos, išankstinis įkėlimas ir CDN integracija.
TL;DR
  • Pakeiskite viešuosius šliuzus dedikuotu šliuzu (gateway) ir sumažinkite IPFS delsą nuo kelių sekundžių iki mažiau nei 200 ms.
  • Vieši šliuzai neatpažintiems (cold) CID atlieka DHT paiešką, o tai prideda 2–15 sekundžių, kol turinys išsprendžiamas.
  • Prisekite failus įrašymo, o ne skaitymo metu, kad šliuzas jau turėtų juos dar prieš pirmąją užklausą.
  • Derinkite dedikuotą šliuzą su CDN kraštiniu tašku (edge), kad pasaulinė IPFS delsa sumažėtų iki 10–50 ms.

„IPFS yra lėtas” — tai vienas dažniausių kūrėjų skundų, ir kartu vienas lengviausiai išsprendžiamų. Kaltininkas beveik visada yra prieigos būdas, o ne pats protokolas. Šis vadovas apima keturis metodus, kurie pašalina IPFS delsos problemas gamybinėje aplinkoje.

IPFS Ninja

Greita nuoroda: IPFS prieigos būdai pagal greitį#

Prieigos būdasTipinis TTFBKada naudoti
Viešasis šliuzas (ipfs.io, dweb.link)2–15 sTik kūrimui ir testavimui
Dedikuotas šliuzas (prisegtas turinys)50–200 msVisam gamybiniam srautui
Dedikuotas šliuzas + CDN kraštas10–50 msGlobaliai vartotojų bazei
Vaizdų optimizavimo galinė vieta<100 ms (šiltas)Visam vaizdo turiniui

Jei gamybinėje aplinkoje naudojate viešuosius šliuzus, pereikite prie dedikuoto šliuzo — ir didžioji dalis delsos išnyks nedelsiant.

Kodėl viešieji šliuzai yra lėti#

Viešieji šliuzai kiekvienam CID, kurio neseniai nematė, atlieka DHT (Distributed Hash Table) paiešką. DHT paieška reiškia dešimčių tinklo partnerių užklausas, siekiant rasti, kas saugo turinį — šis kelionės pirmyn ir atgal laikas šaltame užklause užtrunka 2–15 sekundžių.

Net ir pasiekus spartinę atmintį, viešieji šliuzai aptarnauja milijonus vartotojų. Jūsų neseniai prisegto failo spartinimo prioritetas yra žemas ir jis gali būti pašalintas tarp užklausų.

1 sprendimas: dedikuotas šliuzas#

Dedikuotas šliuzas yra privatus jūsų paskyrai. Prisegti failai iš karto išsaugomi tame šliuze — jokios DHT paieškos jokioje užklausoje, nepriklausomai nuo to, ar ji šalta, ar šilta.

# Prieš: viešasis šliuzas, lėtas ir nepatikimas
curl https://ipfs.io/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

# Po: dedikuotas šliuzas, greitas ir deterministinis
curl https://my-app.gw.ipfs.ninja/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

Sukurkite šliuzą savo IPFS.NINJA valdymo skydelyje ir nustatykite šliuzo vardą pagal savo projektą. Šliuzo vardai palaiko ribotą prieigos režimą (reikalingas žetonas) arba atvirą režimą viešam statiniam turiniui.

2 sprendimas: prisekite rašymo metu, ne skaitymo metu#

Prisekite failus iš karto juos sukūrę, kad šliuzas juos turėtų dar prieš bet kokią vartotojo užklausą. Greičiausia užklausa yra ta, kuri niekada nesukelia spartinės atminties praradimo.

# Vienu žingsniu įkelkite ir prisekite
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"
  }'

# Atsakas — išsaugokite CID, iš karto pateikite url
# {
#   "cid": "bafy...",
#   "sizeMB": 0.24,
#   "uris": {
#     "ipfs": "ipfs://bafy...",
#     "url": "https://ipfs.ninja/ipfs/bafy..."
#   }
# }

Jei turite esamų CID iš kito mazgo ar prisegimo paslaugos, prisekkite iš naujo be pakartotinio įkėlimo:

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

Visą įkėlimo API nuorodą rasite kaip įkelti failus į IPFS.

3 sprendimas: CDN prieš šliuzą#

Dedikuoti šliuzai aptarnauja iš fiksuoto regiono. Jei jūsų vartotojai išsidėstę keliuose žemynuose, pridėkite CDN kraštų sluoksnį, kad aptarnautumėte iš artimiausio buvimo taško.

Kadangi IPFS naudoja turinio adresavimą — duotas CID visada išsprendžiamas į identišką baitų rinkinį — galite saugoti talpykloje amžinai:

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

Cloudflare pavyzdys (nemokamas planas tinka daugumai statinio turinio apkrovų):

  1. Pridėkite savo šliuzo subdomeną (my-app.gw.ipfs.ninja) kaip Cloudflare tarpininkuojamą CNAME.
  2. Sukurkite puslapio taisyklę: my-app.gw.ipfs.ninja/ipfs/*Cache Everything, Edge Cache TTL: mėnuo.
  3. Pirmoji užklausa pasiekia šliuzą ir išsaugoma artimiausio krašto PoP talpykloje. Visos vėlesnės užklausos aptarnaujamos iš Cloudflare.

Rezultatas: globalus TTFB sumažėja nuo 50–200 ms iki 10–50 ms.

4 sprendimas: vaizdų optimizavimo API#

Neapdoroti IPFS vaizdai, pateikiami visu raiškumu, sulėtina puslapius ir kenkia Core Web Vitals. Naudokite vaizdų optimizavimo galinę vietą, kad keistumėte dydį krašte ir teiktumėte šiuolaikinius formatus:

# Originalas (pilnas raiškumas per šliuzą)
https://my-app.gw.ipfs.ninja/ipfs/bafy...

# Pakeistas iki 800 px pločio, konvertuotas į WebP
https://api.ipfs.ninja/image/bafy...?w=800&format=webp

# Kvadratinė miniatiūra
https://api.ipfs.ninja/image/bafy...?w=200&h=200&fit=cover

React aplinkoje:

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

Optimizavimo galinė vieta išsaugo kiekvieno (cid, width, format) derinio talpyklą — vėlesnės užklausos su tais pačiais parametrais visiškai apeinant pradžios serverį.

Kontrolinis sąrašas#

  • Pereikite nuo viešųjų šliuzų prie dedikuoto šliuzo
  • Prisekite turinį rašymo metu (įkėlimo metu), ne skaitymo metu
  • Nustatykite Cache-Control: immutable šliuzo atsakuose
  • Pridėkite CDN prieš šliuzą globaliam srautui
  • Teikite vaizdus per optimizavimo galinę vietą, o ne tiesioginius šliuzo URL

Informacijos apie tai, kodėl prisegimas svarbus prieinamumui — ne tik greičiui — rasite kas yra IPFS prisegimas.


Pasiruošę pradėti prisegti? Susikurkite nemokamą paskyrą — 50 failų, 1 GB saugykla, 2 GB pralaidumas per mėnesį. Kredito kortelė nereikalinga.

Apie šį straipsnį: Šį straipsnį sukūrė DI asistentas, naudodamas IPFS.NINJA turinio generavimo darbo eigą, tada jį peržiūrėjo ir patvirtino Nacho Coll. Visi kodo pavyzdžiai buvo patikrinti pagal gyvą IPFS.NINJA API. Jei pastebėjote netikslumą, atidarykite problemą adresu https://github.com/ipfs-ninja/feedback. Sužinokite daugiau apie tai, kaip mes naudojame DI savo turinyje, ir susipažinkite su žmonėmis už IPFS.NINJA.

Nacho Coll

Apie autorių

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.

Grįžti į Tinklaraštį

Susiję straipsniai