deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Vercel blog

Vercel, FastAPI statik dosyalarını CDN'den sunarak function çağrılarını atlıyor

Vercel artık FastAPI frontend'lerini ve StaticFiles mount'larını build sırasında CDN'ine taşıyor; böylece bu istekler serverless function çağrılmadan yanıtlanıyor.

Vercel, FastAPI statik dosyalarını CDN'den sunarak function çağrılarını atlıyor

Ne değişti

Vercel, FastAPI uygulamalarındaki statik içeriği artık doğrudan edge CDN'sinden sunmaya başladı. Şirketin changelog kaydına göre, app.frontend() ile kaydedilen frontend'ler ve FastAPI'nin StaticFiles ile mount edilen dizinleri artık build sırasında algılanarak CDN'ye taşınıyor. Bu yollara gelen istekler, bir Vercel Function çağrılmadan CDN tarafından yanıtlanıyor.

Nasıl çalışır

Changelog, bu deseni şöyle örneklendiriyor: bir uygulama kök dizininde app.frontend("/", directory="dist") ile bir dist dizini yayınlıyor ve app.mount("/assets", StaticFiles(directory="assets"), name="assets") ile ek varlıkları sunuyor. Hem frontend hem de StaticFiles mount'u build sonrasında CDN'de yer alıyor.

Vercel, FastAPI'nin yönlendirme semantiğinin taşınma sonrasında da korunduğunu belirtiyor. FastAPI route'ları bildirim sırasına göre değerlendirdiğinden, bir StaticFiles mount'undan önce bildirilen açık bir route, aynı yoldaki herhangi bir CDN dosyasına göre önceliğini koruyor. Changelog'daki örnekte, /static mount'undan önce bildirilen bir @app.get("/static/manifest.") handler'ı, dizinin geri kalanı CDN'de olsa bile Vercel Function tarafından sunulmaya devam ediyor.

Bilinmesi gereken bir uyumluluk detayı daha var: CDN'ye taşınan kaynak dizinler function bundle'ında kalıyor, dolayısıyla uygulama kodu runtime'da bunları okumaya devam edebilir. Bu dosyaların yalnızca CDN'de var olmasını isteyen ekipler, pyproject.toml içinde tool.vercel.fastapi.static.exclude = true ayarlayarak bunları bundle'dan çıkarabilir.

Function'da kalanlar

Her şey CDN'ye taşınmaya uygun değil. Vercel'e göre dependency guard'larla korunan frontend'ler, CDN dependency kontrolü yapamadığı için function'da kalıyor; middleware arkasındaki statik dosyalar da aynı şekilde function'da bırakılıyor. pyproject.toml içindeki iki ayar varsayılanları geçersiz kılıyor: tool.vercel.fastapi.static.cdn = true, dependency veya middleware devrede olsa bile CDN'ye taşınmayı zorluyor; aynı anahtarın false yapılması ise uygulamayı CDN üzerinden sunumdan tamamen çıkarıyor.

Neden önemli

Bir Python serverless function'a ulaşan her istek, bir CDN isabetine kıyasla ek bir hop, olası cold-start riski ve faturalandırılabilir compute süresi ekliyor. Statik varlıkları ve build edilmiş frontend'leri build sırasında CDN'ye taşımak, kullanıcıların en sık dokunduğu yollar (sayfalar, script'ler ve stylesheet'ler gibi) için bu yükü ortadan kaldırıyor ve function'ı asıl API mantığını işlemeye bırakıyor.

Bu değişiklik ayrıca Python uygulamaları ile Vercel'in üzerine inşa edildiği JavaScript framework'leri arasındaki farkı da daraltıyor; JavaScript tarafında statik çıktıyı CDN'den sunmak uzun zamandır varsayılandı. FastAPI geliştiricileri artık yönlendirmelerini baştan yazmadan benzer davranış elde ediyor; çünkü bildirim sırası, dependency guard'lar ve middleware semantiği gereken yerlerde yine geçerli. Anlamlı bir trafikle Vercel'de FastAPI çalıştıran ekipler için pratik sonuç, daha az function çağrısı ve daha hızlı statik yanıtlar; pyproject.toml bayrakları ise function'ın devrede kalması gereken durumlar için bir çıkış kapısı görevi görüyor.

  • #vercel
  • #fastapi
  • #python
  • #cdn
  • #serverless

İlgili yazılar