JavaScript Academy · leksjon

Versjonering og oppgraderinger

Migrer skjemaer når versjoner endres.

Leksjon 4 av 413 trinn

Versjonering og oppgraderinger er en gratis leksjon i JavaScript Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i JavaScript Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i JavaScript Academy inneholder totalt 4 leksjoner.

Hvorfor versjonere?

Apper utvikler seg: De legger til objektlagre og indekser eller endrer hvordan dataene er utformet. IndexedDB bruker et versjonsnummer til å håndtere disse skjem endringene på en trygg måte i nettleseren til hver bruker.

Versjonsnummeret

Det andre argumentet til open er versjonen, et positivt heltall. Når De øker den, forteller De nettleseren at skjemaet er endret, og en oppgradering utløses.

// Bumping from 1 to 2 triggers onupgradeneeded:
const request = indexedDB.open('app-db', 2);

Oppgraderinger går bare oppover

De kan bare øke versjonen. Hvis De åpner med et lavere nummer enn det som er lagret, mislykkes operasjonen med en feil. Reduser aldri versjonen.

// If the stored DB is version 3:
const req = indexedDB.open('app-db', 2);
req.onerror = () => console.log('cannot open older version');

oldVersion og newVersion

Inne i onupgradeneeded inneholder hendelsen oldVersion og newVersion. Bruk dem til å utføre bare migreringene som ikke allerede er kjørt.

request.onupgradeneeded = (e) => {
  console.log('upgrading from', e.oldVersion, 'to', e.newVersion);
};

Trinnvise migreringer

Et robust mønster er å la en struktur med gjennomfall bruke oldVersion: Hver blokk bygger videre på den forrige, slik at en bruker på en hvilken som helst eldre versjon når det nyeste skjemaet.

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' });
  }
};

Legge til en indeks senere

Hvis De vil legge til en indeks i et eksisterende objektlager under en oppgradering, henter De objektlageret fra oppgraderingstransaksjonen og kaller createIndex på det.

request.onupgradeneeded = (e) => {
  if (e.oldVersion < 3) {
    const store = e.target.transaction.objectStore('notes');
    store.createIndex('byDate', 'createdAt');
  }
};

Transaksjonen for versjonsendring

Under onupgradeneeded er hendelsens transaction en spesiell versionchange-transaksjon. Det er den eneste konteksten der både skjemaredigering og datamigrering kan foregå.

request.onupgradeneeded = (e) => {
  const tx = e.target.transaction; // versionchange tx
  const store = tx.objectStore('notes');
  // migrate existing records here if needed
};

Migrere eksisterende data

Hvis en skjem aendring krever at poster får en ny struktur, kan De iterere gjennom objektlageret med en markør under oppgraderingen og bruke put til å lagre de omformede verdiene på nytt.

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();
  }
};

Hendelsen versionchange

Når én fane oppgraderer, mottar andre faner som har den gamle versjonen en versionchange-hendelse på sin db. De bør lukke forbindelsen, slik at oppgraderingen ikke blir blokkert.

db.onversionchange = () => {
  db.close(); // let the other tab upgrade
  console.log('database is outdated, please reload');
};

Slette objektlagre

De kan fjerne et foreldet objektlager under en oppgradering med db.deleteObjectStore(name). Dette sletter objektlageret og dataene permanent.

request.onupgradeneeded = (e) => {
  const db = e.target.result;
  if (e.oldVersion < 4 && db.objectStoreNames.contains('temp')) {
    db.deleteObjectStore('temp');
  }
};

Beste praksis for oppgraderinger

Hold migreringene idempotente og ordne dem etter oldVersion, lukk gamle forbindelser ved versionchange, og test oppgraderinger fra alle tidligere versjoner. Da bevares dataene til brukere som kommer tilbake.

Hurtigsjekk

Test forståelsen Deres av versjonering og oppgraderinger.

Oppsummering

De har lært om versjonering og oppgraderinger:

  • Øk versjonsnummeret for å utløse onupgradeneeded.
  • Bruk oldVersion til trinnvise, idempotente migreringer.
  • Oppgraderingens versionchange-transaksjon redigerer skjema og data.
  • Migrer poster med en markør og cursor.update.
  • Lukk gamle faner ved versionchange-hendelsen.

De er ferdig med IndexedDB. Deretter skal vi se på Service Workers.

Gratis å komme i gang

Lær deg JavaScript med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
59
Leksjoner
200

Ofte stilte spørsmål

Er leksjonen «Versjonering og oppgraderinger» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien JavaScript Academy, inkludert «Versjonering og oppgraderinger», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i JavaScript Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Versjonering og oppgraderinger»?

Migrer skjemaer når versjoner endres. Du øver på JavaScript Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med JavaScript Academy?

Ingen tidligere erfaring er nødvendig. JavaScript Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Versjonering og oppgraderinger»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne JavaScript Academy-leksjonen?

Ja. Alle JavaScript Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Åpne en database
  2. Transaksjoner og CRUD
  3. Indekser og spørringer
  4. Versjonering og oppgraderinger
← Tilbake til JavaScript Academy