Mühendislik//7 dk okuma

CDN Çeviri Dağıtımı: Edge Cache ile i18n Performans Rehberi

Eray Gündoğmuş
Paylaş

CDN Çeviri Dağıtımı: Edge Cache ile i18n Performans Rehberi

Çeviri dağıtımı, göz önünde gizlenen bir performans sorunudur. Uygulamanız saniyenin altında sayfa yükleme sürelerine, optimize edilmiş görsellere ve kod bölünmüş paketlere sahip olabilir — ancak çeviriler geç gelirse kullanıcılar düzen kaymalarını, yükleme döndürücülerini veya daha kötüsü ekranda yanıp sönen çevrilmemiş anahtarları görür.

Bu rehber, better-i18n'in Cloudflare R2 ve edge caching kullanarak çeviri dağıtımını nasıl çözdüğünü ele alır ve mühendislik ekiplerine sunulan CDN operasyonlarının tamamını adım adım açıklar.


Çeviri Dağıtımı i18n Performansı İçin Neden Önemli?

Geleneksel i18n kurulumları, çevirileri uygulama içine paketler. Her yazım hatasını düzelttiğinizde veya yeni bir dil eklediğinizde tam bir derleme ve yeniden dağıtım gerekir. Mobil uygulamalar için bu, uygulama mağazası incelemesini beklemek demektir. Web uygulamaları için ise mühendislik dışı bir değişikliği engelleyen bir dağıtım hattı anlamına gelir.

CDN çeviri dağıtımı, çeviri içeriğini uygulama kodundan ayırır. Çeviriler edge'de barınır ve kullanıcıya en yakın Cloudflare düğümünden sunulur. Uygulamanız bunları çalışma zamanında HTTP üzerinden çeker.

Performans özellikleri:

  • 50ms'nin altında dağıtım — en yakın edge düğümünden (dünya genelinde 300+ lokasyon)
  • Sıfır origin gidiş-dönüş — önbellekteki çeviriler için
  • Artımlı güncellemeler — uygulama yeniden dağıtımı olmadan
  • Paralel yükleme — yalnızca mevcut sayfanın ihtiyaç duyduğu namespace'ler

Her Şeyi Mümkün Kılan URL Yapısı

better-i18n'deki her çeviri dosyası belirlenebilir bir URL kalıbını takip eder:

https://cdn.better-i18n.com/{org}/{project}/{locale}/{namespace}.json

Bu yapı kasıtlı olarak basit ve öngörülebilirdir. Bu şu anlama gelir:

  1. Tarayıcı önbellekleri doğal olarak çalışır — her locale-namespace çifti benzersiz ve kararlı bir URL'ye sahiptir
  2. Service worker'lar bilinen yolları ön-önbelleğe alabilir — keşif isteklerine gerek kalmadan
  3. CDN edge düğümleri yol başına bağımsız olarak önbelleğe alırfr/auth.json için bir önbellek ıskalama en/common.json'u etkilemez
  4. Herhangi bir HTTP istemcisi tüketebilir — SDK yok, kimlik doğrulama yok, özel başlık yok

Birkaç gerçek örnek:

# English common translations
https://cdn.better-i18n.com/acme/web-app/en/common.json

# Turkish authentication strings
https://cdn.better-i18n.com/acme/web-app/tr/auth.json

# Japanese dashboard translations
https://cdn.better-i18n.com/acme/web-app/ja/dashboard.json

Her projenin ayrıca /{org}/{project}/manifest.json adresinde mevcut tüm locale'leri listeleyen bir manifest'i vardır. Mobil SDK'lar bunu, locale listelerini sabit kodlamadan çalışma zamanında dilleri otomatik keşfetmek için kullanır.


Upload ve Merge: CDN Güncellemeleri İçin İki Model

better-i18n, CDN'deki çevirileri güncellemek için iki farklı yaklaşım sunar.

Tam Yükleme (cdn.upload ve cdn.uploadBatch)

Upload, R2'deki namespace-locale dosyasının tamamını değiştirir:

# Single file
better-i18n cdn upload --locale en --namespace common

# Multiple files in one operation
better-i18n cdn upload-batch --locales en,tr,fr --namespaces common,auth

Toplu yükleme şu durumlarda doğru tercihtir:

  • İlk kez yeni bir dil yayınlarken
  • Büyük bir yeniden yapılandırma sonrası CDN dosyalarını yeniden oluştururken
  • TMS'nizden tam bir çeviri dışa aktarımı dağıtırken

Toplu operasyonlar dahili olarak optimize edilmiştir — R2 yazma işlemleri ve önbellek geçersiz kılmaları toplu hale getirilir, bu da ardışık tekil yüklemelere kıyasla toplam yayılma süresini azaltır.

Artımlı Birleştirme (cdn.merge)

Merge, R2'deki mevcut dosyayı okur, anahtar düzeyinde değişiklikleri uygular ve sonucu geri yazar:

better-i18n cdn merge --locale en --namespace common --keys "welcome,nav.home"

Birleştirmeye dahil edilmeyen anahtarlar değişmeden kalır. Bu, artımlı güncellemeler için daha güvenli bir seçenektir çünkü:

  • Yanlışlıkla üzerine yazma olmaz — dosyadaki diğer anahtarlar korunur
  • Eşzamanlılık güvenliği — birden fazla ekip üyesi veya CI/CD hattı çakışma olmadan farklı anahtarları birleştirebilir
  • Daha küçük değişiklik yüzeyi — yalnızca belirtilen anahtarlar etkilenir

Birleştirme Önizlemesi (cdn.mergePreview)

Birleştirme işlemi gerçekleştirmeden önce sonucu önizleyin:

better-i18n cdn merge-preview --locale en --namespace common --keys "welcome"

Bu, hangi anahtarların ekleneceğini, güncelleneceğini veya değişmeden kalacağını gösteren bir diff döndürür. Birleştirme önizlemesini CI/CD hatlarında CDN dağıtımlarını bir inceleme adımına bağlamak için kullanın — tıpkı bir veritabanı migrasyonunu uygulamadan önce incelediğiniz gibi.


Yinelenen Tespiti: CDN Payload'ınızı Yalın Tutmak

Çeviri projeleri büyüdükçe yineleneler birikir. Bir "Kaydet" düğmesi metni common.json, settings.json ve profile.json dosyalarında her üçünde de aynı değerlerle bulunabilir. Her yinelenen, toplam CDN payload'ını artırır ve bakım yükü oluşturur — birini güncellersiniz, diğerlerini unutursunuz.

Yinelenenleri Tespit Etme (cdn.detectDuplicates)

better-i18n cdn detect-duplicates

Bu, projenizdeki tüm CDN dosyalarını tarar ve namespace'ler arasında aynı çeviri değerlerini paylaşan anahtarların bir raporunu üretir. Rapor şunları gösterir:

  • Hangi anahtarlar yinelenmiş
  • Hangi namespace'lerde bulunuyorlar
  • Paylaşılan değer

Temizlik (cdn.cleanupDuplicates)

better-i18n cdn cleanup-duplicates --target-namespace common

Bu, yinelenenleri bir hedef namespace'e (genellikle common) birleştirir ve kaynak namespace'lerden kaldırır. İşlem dahili olarak merge kullanır, bu nedenle eşzamanlı erişim için güvenlidir.

En iyi uygulama: Her büyük çeviri içe aktarımı veya namespace yeniden düzenlemesinden sonra cdn.detectDuplicates çalıştırın. CDN payload'larını minimal tutmak için periyodik temizlikler planlayın.


CDN Yaşam Döngüsü Yönetimi

Kurulum (cdn.setup)

Projeniz için CDN dağıtımını başlatın:

better-i18n cdn setup

Bu, R2 bucket yapısını oluşturur, Cloudflare Worker edge yönlendirmesini yapılandırır ve önbellek kurallarını ayarlar. CDN dağıtımını bir proje için ilk kez etkinleştirirken bunu bir kez çalıştırın.

Dosya Yönetimi

CDN durumunuzu denetlemek için tüm dağıtılmış dosyaları listeleyin:

better-i18n cdn list-files

Her dosyanın locale'ini, namespace'ini, boyutunu ve son değiştirilme zaman damgasını döndürür. Dağıtımları doğrulamak ve eski dosyaları tanımlamak için kullanışlıdır.

Bir namespace'i kullanımdan kaldırırken veya bir locale'i kaldırırken tek tek dosyaları silin:

better-i18n cdn delete-file --locale en --namespace legacy-feature

Kaldırma (cdn.uninstall)

CDN dağıtımını tamamen kaldırın:

better-i18n cdn uninstall

R2 depolamayı, edge yapılandırmasını ve önbellek kurallarını temizler. Bir projeyi taşırken veya bir uygulamayı devre dışı bırakırken kullanın.


Pratikte Performans

CDN çeviri dağıtımının üretim ortamındaki görünümü:

MetrikDeğer
Edge lokasyonları300+ (Cloudflare ağı)
Önbellek isabet gecikmesi< 50ms (tipik)
Önbellek ıskalama gecikmesi< 200ms (R2 origin çekme)
Yayılma süresiYayınlama sonrası < 10 saniye
Çıkış maliyeti0$ (Cloudflare R2)

Sıfır çıkış maliyeti konusu vurgulanmaya değer. Geleneksel CDN kurulumları GB başına bant genişliği ücreti alır. R2 ile çeviri dağıtım maliyetleriniz trafik hacminden bağımsız olarak sabittir. Ayda 10 milyon çeviri çekme işlemi gerçekleştiren bir proje, 1.000 çekme yapanla aynı ücreti öder.

Çeviriler İçin Namespace Tabanlı Kod Bölme

Namespace modeli, çeviriler için kod bölme işlevi görür. Tüm çevirileri önceden yüklemek yerine:

❌ /en/all-translations.json (450 KB)

Uygulamanız yalnızca mevcut rotanın ihtiyaç duyduğunu yükler:

✅ /en/common.json (12 KB) + /en/auth.json (4 KB) = 16 KB

Bu, büyük çeviri setlerine sahip uygulamalarda ilk sayfa yüklemeyi %90'dan fazla azaltır. Edge caching ile birleştirildiğinde, sonraki sayfa gezinmeleri yalnızca yeni namespace'i çeker — dashboard.json, kullanıcı kontrol paneline gittiğinde yüklenir, daha önce değil.


Entegrasyon Yaklaşımları

SDK Entegrasyonu (Önerilen)

Resmi SDK'lar CDN çekme, önbellekleme ve geri dönüş işlemlerini otomatik olarak yönetir:

  • @better-i18n/next — ISR/SSG desteğiyle sunucu taraflı çekme
  • @better-i18n/use-intl — TanStack Router ve Vite uygulamaları için istemci taraflı çekme
  • @better-i18n/expo — MMKV/AsyncStorage önbellekleme ile çevrimdışı öncelikli

Her SDK, CDN URL'sini i18n.config.ts proje tanımlayıcınızdan çözümler. Manuel URL oluşturmaya gerek yoktur.

Doğrudan HTTP (Tüm Platformlar)

CDN düz bir HTTPS uç noktasıdır. Kimlik doğrulama yok, özel başlık yok:

curl https://cdn.better-i18n.com/acme/web-app/en/common.json

Bu, better-i18n çevirilerini herhangi bir platformdan tüketilebilir kılar: iOS (Swift), Android (Kotlin), backend servisleri (Go, Python, Ruby), oyun motorları, IoT cihazları — HTTP GET isteği yapabilen her şey.


Yayınlama-CDN Hattı

Bir çeviriyi düzenlemekten küresel olarak sunmaya kadar olan tam iş akışı:

  1. Düzenle — Dashboard, REST API veya MCP araçları
  2. Bekleyen değişiklikleri önizlegetPendingChanges neyin dağıtılacağını gösterir
  3. Birleştirme sonucunu önizlecdn.mergePreview anahtar düzeyinde diff gösterir (isteğe bağlı)
  4. YayınlapublishTranslations cdn_upload senkronizasyon işini tetikler
  5. İzlegetSyncs / getSync dağıtım durumunu takip eder
  6. Doğrulacdn.listFiles güncellenen dosyanın yayında olduğunu onaylar

Bu, mühendislik ekiplerine çeviri dağıtımları için kod dağıtımlarıyla aynı titizliği sağlar: önizle, yayınla, izle, doğrula.


Başlarken

  1. Projenizi oluşturundash.better-i18n.com adresinden
  2. cdn.setup çalıştırın — R2 depolama ve edge yönlendirmesini başlatmak için
  3. Çevirileri ekleyin ve CDN'e yayınlayın
  4. Entegre edin — framework SDK'nız veya doğrudan HTTP ile
  5. İzleyincdn.listFiles ve cdn.detectDuplicates ile

CDN dağıtımı, ücretsiz plan dahil tüm planlarda mevcuttur. Çevirileriniz ilk günden itibaren edge'de önbelleğe alınır.

Comments

Loading comments...