Versiointi ja päivitykset
Siirtäkää skeemoja versiomuutosten yhteydessä.
Versiointi ja päivitykset on ilmainen JavaScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu JavaScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. JavaScript Academy-kurssilla on yhteensä 4 oppituntia.
Miksi versiointia tarvitaan?
Sovellukset kehittyvät: niihin lisätään objektivarastoja ja indeksejä tai tietojen rakennetta muutetaan. IndexedDB käyttää versionumeroa näiden skeemamuutosten hallintaan turvallisesti kaikkien käyttäjien selaimissa.
Versionumero
open-komennon toinen argumentti on positiivinen kokonaisluku eli versio. Sen kasvattaminen kertoo selaimelle, että skeema on muuttunut, ja käynnistää päivityksen.
// Bumping from 1 to 2 triggers onupgradeneeded:
const request = indexedDB.open('app-db', 2);Versiota voi vain kasvattaa
Voit kasvattaa versiota, mutta et pienentää sitä. Avaaminen tallennettua versiota pienemmällä numerolla epäonnistuu virheeseen. Älä koskaan pienennä versiota.
// If the stored DB is version 3:
const req = indexedDB.open('app-db', 2);
req.onerror = () => console.log('cannot open older version');oldVersion ja newVersion
onupgradeneeded-käsittelijän sisällä tapahtuma tarjoaa arvot oldVersion ja newVersion. Niiden avulla voit suorittaa vain ne migraatiot, joita ei ole vielä tehty.
request.onupgradeneeded = (e) => {
console.log('upgrading from', e.oldVersion, 'to', e.newVersion);
};Vaiheittaiset migraatiot
Vankka toimintamalli on käyttää oldVersion-arvoon perustuvaa fall-through-rakennetta: kukin lohko rakentuu edellisen päälle, joten minkä tahansa vanhan version käyttäjä päätyy uusimpaan skeemaan.
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' });
}
};Indeksin lisääminen myöhemmin
Jos haluat lisätä indeksin olemassa olevaan objektivarastoon päivityksen aikana, hae objektivarasto päivitystransaktiosta ja kutsu siinä createIndex-metodia.
request.onupgradeneeded = (e) => {
if (e.oldVersion < 3) {
const store = e.target.transaction.objectStore('notes');
store.createIndex('byDate', 'createdAt');
}
};Versionvaihdon transaktio
onupgradeneeded-käsittelijän aikana tapahtuman transaction on erityinen versionchange-transaktio. Se on ainoa asiayhteys, jossa sekä skeemaa että tietoja voidaan muokata.
request.onupgradeneeded = (e) => {
const tx = e.target.transaction; // versionchange tx
const store = tx.objectStore('notes');
// migrate existing records here if needed
};Olemassa olevien tietojen siirtäminen
Jos skeemamuutos edellyttää tietueiden rakenteen muuttamista, käy objektivarasto läpi kursorilla päivityksen aikana ja tallenna muunnetut arvot takaisin komennolla put.
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();
}
};versionchange-tapahtuma
Kun yksi välilehti päivittää version, muut vanhaa versiota käyttävät välilehdet saavat versionchange-tapahtuman db-objektilleen. Niiden tulee sulkeutua, jotta päivitys ei esty.
db.onversionchange = () => {
db.close(); // let the other tab upgrade
console.log('database is outdated, please reload');
};Objektivarastojen poistaminen
Voit poistaa vanhentuneen objektivaraston päivityksen aikana komennolla db.deleteObjectStore(name). Tämä poistaa varaston ja sen tiedot pysyvästi.
request.onupgradeneeded = (e) => {
const db = e.target.result;
if (e.oldVersion < 4 && db.objectStoreNames.contains('temp')) {
db.deleteObjectStore('temp');
}
};Päivitysten parhaat käytännöt
Pidä migraatiot idempotentteina ja järjestä ne oldVersion-arvon mukaan, sulje vanhat yhteydet versionchange-tapahtuman yhteydessä ja testaa päivitykset jokaisesta aiemmasta versiosta. Näin palaavien käyttäjien tiedot säilyvät ehjinä.
Pikatarkistus
Testaa, kuinka hyvin ymmärrät versioinnin ja päivitykset.
Kertaus
Opit versioinnin ja päivitykset:
- Kasvata versionumeroa käynnistääksesi
onupgradeneeded-käsittelijän. - Käytä
oldVersion-arvoa vaiheittaisissa ja idempotenteissa migraatioissa. - Päivityksen
versionchange-transaktio muokkaa skeemaa ja tietoja. - Siirrä tietueet kursorilla ja komennolla
cursor.update. - Sulje vanhat välilehdet
versionchange-tapahtuman yhteydessä.
IndexedDB on nyt käsitelty. Seuraavaksi Service Workers.
Opi JavaScript tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 59
- Oppitunnit
- 200
Usein kysytyt kysymykset
Onko oppitunti ”Versiointi ja päivitykset” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa JavaScript Academy-oppimispolun 3 oppituntia, myös oppitunnin “Versiointi ja päivitykset”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. JavaScript Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Versiointi ja päivitykset”?
Siirtäkää skeemoja versiomuutosten yhteydessä. Harjoittelet JavaScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni JavaScript Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin JavaScript Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Versiointi ja päivitykset”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä JavaScript Academy-oppitunnilla?
Kyllä. Jokainen JavaScript Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Tietokannan avaaminen
- Transaktiot ja CRUD
- Indeksit ja kyselyt
- Versiointi ja päivitykset