Sürümleme ve Yükseltmeler
Sürüm değişiklikleriyle şemaları taşıyın.
Sürümleme ve Yükseltmeler, CoddyKit'te ücretsiz bir JavaScript Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, JavaScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. JavaScript Academy kursu toplamda 4 dersten oluşur.
Sürüm Yönetimi Neden Gerekli?
Uygulamalar zamanla gelişir: depolar ekler, dizinler ekler veya verilerin yapısını değiştirirsiniz. IndexedDB, bu şema değişikliklerini her kullanıcının tarayıcısında güvenli bir şekilde yönetmek için bir sürüm numarası kullanır.
Sürüm Numarası
open işlevinin ikinci bağımsız değişkeni, pozitif bir tam sayı olan sürümdür. Bu sayıyı artırmanız, tarayıcıya şemanın değiştiğini bildirir ve bir yükseltmeyi tetikler.
// Bumping from 1 to 2 triggers onupgradeneeded:
const request = indexedDB.open('app-db', 2);Yükseltme Yalnızca Artar
Sürümü yalnızca artırabilirsiniz. Kayıtlı sürümden daha düşük bir sayıyla açma işlemi hata verir. Sürümü hiçbir zaman azaltmayın.
// If the stored DB is version 3:
const req = indexedDB.open('app-db', 2);
req.onerror = () => console.log('cannot open older version');oldVersion ve newVersion
onupgradeneeded içinde olay, oldVersion ve newVersion değerlerini sunar. Henüz uygulanmamış veri geçişlerini gerçekleştirmek için bunları kullanın.
request.onupgradeneeded = (e) => {
console.log('upgrading from', e.oldVersion, 'to', e.newVersion);
};Artımlı Veri Geçişleri
Sağlam bir yaklaşım, oldVersion kullanarak blokların sırayla ilerlemesini sağlamaktır: Her blok bir öncekinin üzerine kurulur ve böylece herhangi bir eski sürümdeki kullanıcı en son şemaya ulaşır.
request.onupgradeneeded = (e) => {
const db = e.target.result;
if (e.oldVersion < 1) {
db.createObjectStore('notes', { keyPath: 'id' });
}
if (e.oldVersion < 2) {
db.createObjectStore('tags', { keyPath: 'name' });
}
};Daha Sonra Dizin Ekleme
Yükseltme sırasında mevcut bir depoya dizin eklemek için depoyu yükseltme işleminden alın ve üzerinde createIndex çağrısını yapın.
request.onupgradeneeded = (e) => {
if (e.oldVersion < 3) {
const store = e.target.transaction.objectStore('notes');
store.createIndex('byDate', 'createdAt');
}
};Sürüm Değişikliği İşlemi
onupgradeneeded sırasında olayın transaction değeri özel bir versionchange işlemidir. Şema düzenlemeleriyle veri geçişinin aynı anda yapılabildiği tek bağlam budur.
request.onupgradeneeded = (e) => {
const tx = e.target.transaction; // versionchange tx
const store = tx.objectStore('notes');
// migrate existing records here if needed
};Mevcut Verileri Taşıma
Bir şema değişikliği kayıtların yeniden yapılandırılmasını gerektiriyorsa yükseltme sırasında depoda bir imleçle yineleme yapın ve dönüştürülmüş değerleri put ile geri yazın.
const store = e.target.transaction.objectStore('notes');
store.openCursor().onsuccess = (ev) => {
const cursor = ev.target.result;
if (cursor) {
const note = cursor.value;
note.archived = false; // new field
cursor.update(note);
cursor.continue();
}
};Sürüm Değişikliği Olayı
Bir sekme yükseltme yaptığında, eski sürümü kullanan diğer sekmeler kendi db nesnelerinde bir versionchange olayı alır. Yükseltmenin engellenmemesi için bu sekmeler bağlantıyı kapatmalıdır.
db.onversionchange = () => {
db.close(); // let the other tab upgrade
console.log('database is outdated, please reload');
};Depoları Silme
Yükseltme sırasında kullanım dışı bir depoyu db.deleteObjectStore(name) ile kaldırabilirsiniz. Bu işlem depoyu ve verilerini kalıcı olarak siler.
request.onupgradeneeded = (e) => {
const db = e.target.result;
if (e.oldVersion < 4 && db.objectStoreNames.contains('temp')) {
db.deleteObjectStore('temp');
}
};Yükseltme İçin En İyi Uygulamalar
Veri geçişlerini oldVersion değerine göre sıralı ve tekrarlandığında sonucu değişmeyecek şekilde tutun, versionchange sırasında eski bağlantıları kapatın ve yükseltmeleri önceki her sürümden başlayarak sınayın. Böylece geri dönen kullanıcıların verileri korunur.
Hızlı Kontrol
Sürüm yönetimi ve yükseltmeler hakkındaki anlayışınızı sınayın.
Tekrar
Sürüm yönetimini ve yükseltmeleri öğrendiniz:
onupgradeneededolayını tetiklemek için sürüm numarasını artırın.- Artımlı ve tekrarlandığında sonucu değişmeyen veri geçişleri için
oldVersionkullanın. - Yükseltmenin
versionchangeişlemi şemayı ve verileri düzenler. - İmleç ve
cursor.updateile kayıtları taşıyın. versionchangeolayında eski sekmeleri kapatın.
IndexedDB'yi tamamladınız. Sırada Hizmet Çalışanları var.
Sıkça Sorulan Sorular
“Sürümleme ve Yükseltmeler” dersi ücretsiz mi?
Evet — “Sürümleme ve Yükseltmeler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve JavaScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. JavaScript Academy kursu toplamda 4 dersten oluşur.
“Sürümleme ve Yükseltmeler” dersinde ne öğreneceğim?
Sürüm değişiklikleriyle şemaları taşıyın. JavaScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
JavaScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te JavaScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Sürümleme ve Yükseltmeler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu JavaScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her JavaScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Veritabanı Açma
- İşlemler ve CRUD
- Dizinler ve Sorgular
- Sürümleme ve Yükseltmeler