Skip to content

Commit 2bf14fc

Browse files
committed
πŸ‘Ύ smth
1 parent 156392e commit 2bf14fc

File tree

1 file changed

+49
-26
lines changed

1 file changed

+49
-26
lines changed

β€Ž6-data-storage/03-indexeddb/article.mdβ€Ž

Lines changed: 49 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ libs:
77

88
IndexedDB - это встроСнная Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…, Π±ΠΎΠ»Π΅Π΅ мощная, Ρ‡Π΅ΠΌ `localStorage`.
99

10-
- Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: доступны нСсколько Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π° значСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ (ΠΏΠΎΡ‡Ρ‚ΠΈ) Π»ΡŽΠ±Ρ‹ΠΌΠΈ.
10+
- Π₯Ρ€Π°Π½ΠΈΡ‚ практичСски Π»ΡŽΠ±Ρ‹Π΅ значСния ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ, нСсколько Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅ΠΉ
1111
- ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ для надёТности.
1212
- ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ запросы Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ индСксы.
1313
- ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ большС Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Π΅ΠΌ `localStorage`.
@@ -18,6 +18,12 @@ IndexedDB - это встроСнная Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…, Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰
1818

1919
ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `async/await` с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ, которая основана Π½Π° промисах, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ <https://github.com/jakearchibald/idb>. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° Π½Π΅ идСальна, ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ события. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π½Π°Ρ‡Π½Ρ‘ΠΌ с событий, Π° Π·Π°Ρ‚Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° разбСрёмся Π² IndexedDB, рассмотрим ΠΈ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ.
2020

21+
```smart header="Π“Π΄Π΅ хранятся Π΄Π°Π½Π½Ρ‹Π΅?"
22+
ВСхничСски Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ хранятся Π² домашнСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ посСтитСля вмСстС с настройками Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ ΠΈ Ρ‚.Π΄.
23+
24+
Π£ Ρ€Π°Π·Π½Ρ‹Ρ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ОБ Π΅ΡΡ‚ΡŒ своС собствСнноС нСзависимоС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.
25+
```
26+
2127
## ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…
2228

2329
Для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с IndexedDB Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ….
@@ -46,7 +52,9 @@ let openRequest = indexedDB.open(name, version);
4652

4753
Π­Ρ‚ΠΎ событиС Ρ‚Π°ΠΊΠΆΠ΅ сработаСт, Ссли Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π΅Ρ‰Ρ‘ Π½Π΅ сущСствуСт, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² этом ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.
4854

49-
НапримСр, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΌΡ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… с вСрсиСй `1` ΠΈ выполняСм ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ `upgradeneeded`:
55+
Допустим, ΠΌΡ‹ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»ΠΈ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ нашСго прилоТСния.
56+
57+
Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… с вСрсиСй `1` ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ `upgradeneeded` Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:
5058

5159
```js
5260
let openRequest = indexedDB.open("store", *!*1*/!*);
@@ -66,12 +74,13 @@ openRequest.onsuccess = function() {
6674
};
6775
```
6876

69-
Когда ΠΌΡ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ:
77+
Π—Π°Ρ‚Π΅ΠΌ, ΠΏΠΎΠ·ΠΆΠ΅, ΠΌΡ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ 2-ю Π²Π΅Ρ€ΡΠΈΡŽ.
78+
79+
ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ с вСрсиСй `2` ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
7080

7181
```js
7282
let openRequest = indexedDB.open("store", *!*2*/!*);
7383

74-
// ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ сущСствованиС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ вСрсии Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости:
7584
openRequest.onupgradeneeded = function(event) {
7685
// вСрсия ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… мСньшС 2 (ΠΈΠ»ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ сущСствуСт)
7786
let db = openRequest.result;
@@ -109,9 +118,12 @@ let deleteRequest = indexedDB.deleteDatabase(name)
109118

110119
Π Π°Π· ΡƒΠΆ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΎ вСрсионированиС, рассмотрим ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с этим Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.
111120

112-
Допустим, ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π» наш сайт Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, с Π±Π°Π·ΠΎΠΉ вСрсии 1.
121+
Допустим:
122+
1. ΠŸΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π» наш сайт Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, с Π±Π°Π·ΠΎΠΉ вСрсии `1`.
123+
2. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ выпустили ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ наш ΠΊΠΎΠ΄ обновился.
124+
3. И Π·Π°Ρ‚Π΅ΠΌ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π» наш сайт Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅.
113125

114-
Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²Ρ‹ΠΊΠ°Ρ‚ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π» наш сайт Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ наш сайт, Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎ соСдинСниС с Π±Π°Π·ΠΎΠΉ вСрсии 1, Π° другая пытаСтся ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Π±Π°Π·Ρ‹ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ `upgradeneeded`.
126+
Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ наш сайт, Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎ соСдинСниС с Π±Π°Π·ΠΎΠΉ вСрсии 1, Π° другая пытаСтся ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Π±Π°Π·Ρ‹ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ `upgradeneeded`.
115127

116128
ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… всСго ΠΎΠ΄Π½Π° Π½Π° Π΄Π²Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ сайт, ΠΎΠ΄ΠΈΠ½ источник. И ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ вСрсии 1 ΠΈ 2. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π° Π²Π΅Ρ€ΡΠΈΡŽ 2, всС соСдинСния ΠΊ вСрсии 1 Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹.
117129

@@ -133,27 +145,31 @@ openRequest.onsuccess = function() {
133145
*!*
134146
db.onversionchange = function() {
135147
db.close();
136-
alert("Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… устарСла, поТалуста, ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ страницу.")
148+
alert("Database is outdated, please reload the page.")
137149
};
138150
*/!*
139151

140-
// ...Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… доступна ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ db...
152+
// ...Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π³ΠΎΡ‚ΠΎΠ²Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Π΅...
141153
};
142154

143155
*!*
144156
openRequest.onblocked = function() {
145-
// Π΅ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ соСдинСниС ΠΊ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π±Π°Π·Π΅
146-
// ΠΈ ΠΎΠ½ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ послС срабатывания Π½Π° Π½Ρ‘ΠΌ db.onversionchange
157+
// это событиС Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ссли ΠΌΡ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ onversionchange
158+
159+
// это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ соСдинСниС с Ρ‚ΠΎΠΉ ΠΆΠ΅ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…
160+
// ΠΈ ΠΎΠ½ Π½Π΅ Π±Ρ‹Π» Π·Π°ΠΊΡ€Ρ‹Ρ‚ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ для Π½Π΅Π³ΠΎ сработал db.onversionchange
147161
};
148162
*/!*
149163
```
150164

151-
Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ:
165+
...Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, здСсь ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ Π΄Π²Π΅ Π²Π΅Ρ‰ΠΈ:
152166

153-
1. ДобавляСм ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `db.onversionchange` послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ открытия Π±Π°Π·Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ обновлСния.
154-
2. ДобавляСм ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `openRequest.onblocked` для ситуаций, ΠΊΠΎΠ³Π΄Π° староС соСдинСниС Π½Π΅ Π±Ρ‹Π»ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ. Π’Π°ΠΊΠΎΠ³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚, Ссли ΠΌΡ‹ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Π΅Π³ΠΎ Π² `db.onversionchange`.
167+
1. ΠŸΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚Π΅Π»ΡŒ `db.onversionchange` сообщаСт Π½Π°ΠΌ ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ обновлСния, Ссли тСкущая вСрсия Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… устарСла.
168+
2. ΠŸΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Ρ‚Π΅Π»ΡŒ `OpenRequest.onblocked` сообщаСт Π½Π°ΠΌ ΠΎΠ± ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ситуации: Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС Π΅ΡΡ‚ΡŒ соСдинСниС с ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ вСрсиСй, ΠΈ ΠΎΠ½ΠΎ Π½Π΅ закрываСтся, поэтому Π½ΠΎΠ²ΠΎΠ΅ соСдинСниС ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
155169

156-
Π•ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹. НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ "мягко" Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ соСдинСниС Π² `db.onversionchange`, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄ этим. НовоС ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‰Π΅Π΅ соСдинСниС Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΎ сразу послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `db.onversionchange` Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Π² соСдинСниС, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π² Π½ΠΎΠ²ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ посСтитСля Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ старыС для обновлСния.
170+
ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ изящно ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с Π²Π΅Ρ‰Π°ΠΌΠΈ Π² `db.onversionchange`, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅Π»ΡŽ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎ закрытия соСдинСния ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.
171+
172+
Или Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π² `db.onversionchange`, Π° вмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `onblocked` (Π½Π° Π½ΠΎΠ²ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ΡŒ посСтитСля, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ новая вСрсия Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π°, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ Π·Π°ΠΊΡ€ΠΎΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ.
157173

158174
Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ происходит Ρ€Π΅Π΄ΠΊΠΎ, Π½ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, хотя Π±Ρ‹ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ `onblocked`, Ρ‡Ρ‚ΠΎΠ±Ρ‹ наш скрипт Π½Π΅ "ΡƒΠΌΠΈΡ€Π°Π»" ΠΌΠΎΠ»Ρ‡Π°, удивляя посСтитСля.
159175

@@ -182,6 +198,7 @@ IndexedDB ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ [стандартный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сСри
182198
Но для Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.
183199

184200
Бинтаксис для создания Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:
201+
185202
```js
186203
db.createObjectStore(name[, keyOptions]);
187204
```
@@ -196,6 +213,7 @@ db.createObjectStore(name[, keyOptions]);
196213
Если ΠΏΡ€ΠΈ создании Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ `keyOptions`, Ρ‚ΠΎ Π½Π°ΠΌ потрСбуСтся явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ ΠΏΠΎΠ·ΠΆΠ΅, ΠΏΡ€ΠΈ сохранСнии ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
197214

198215
НапримСр, это Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ свойство `id` ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡:
216+
199217
```js
200218
db.createObjectStore('books', {keyPath: 'id'});
201219
```
@@ -205,6 +223,7 @@ db.createObjectStore('books', {keyPath: 'id'});
205223
Π­Ρ‚ΠΎ тСхничСскоС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅. Π’Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΌΡ‹ смоТСм Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ/ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ/ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ созданы/ΡƒΠ΄Π°Π»Π΅Π½Ρ‹/ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя обновлСния вСрсии Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….
206224

207225
Для обновлСния вСрсии Π±Π°Π·Ρ‹ Π΅ΡΡ‚ΡŒ Π΄Π²Π° основных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:
226+
208227
1. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ обновлСния ΠΏΠΎ вСрсиям: с 1 Π½Π° 2, с 2 Π½Π° 3 ΠΈ Ρ‚.Π΄. ΠŸΠΎΡ‚ΠΎΠΌ Π² `upgradeneeded` ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ вСрсии (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Ρ‹Π»Π° 2, сСйчас 4) ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ обновлСния для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ вСрсии (2 Π½Π° 3, Π·Π°Ρ‚Π΅ΠΌ 3 Π½Π° 4).
209228
2. Или ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π·ΡΡ‚ΡŒ список ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ `db.objectStoreNames`. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся [DOMStringList](https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#domstringlist), Π² Π½Ρ‘ΠΌ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ `contains(name)`, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ сущСствованиС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΅ΡΡ‚ΡŒ ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚.
210229

@@ -224,7 +243,6 @@ openRequest.onupgradeneeded = function() {
224243
};
225244
```
226245

227-
228246
Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:
229247

230248
```js
@@ -238,6 +256,7 @@ db.deleteObjectStore('books')
238256
Вранзакция - это Π³Ρ€ΡƒΠΏΠΏΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ всС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹, ΠΈΠ»ΠΈ всС Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ (всё ΠΈΠ»ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ).
239257

240258
НапримСр, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠΊΡƒΠΏΠ°Π΅Ρ‚, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ:
259+
241260
1. Π’Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ дСньги с Π΅Π³ΠΎ счёта.
242261
2. ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅ΠΌΡƒ ΠΏΠΎΠΊΡƒΠΏΠΊΡƒ.
243262

@@ -460,10 +479,13 @@ request.onerror = function(event) {
460479
## Поиск ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ
461480

462481
Π•ΡΡ‚ΡŒ Π΄Π²Π° основных Π²ΠΈΠ΄Π° поиска Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:
463-
1. По ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈΠ»ΠΈ ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Π’ΠΎ Π΅ΡΡ‚ΡŒ: ΠΏΠΎ `book.id` Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ "books".
464-
2. По полям ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `book.price`.
465482

466-
Π‘Π½Π°Ρ‡Π°Π»Π° Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрёмся с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ `(1)`.
483+
1. По Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΊΠ»ΡŽΡ‡Π° ΠΈΠ»ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Π’ нашСм Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ "books" это Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ `book.id `.
484+
2. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ поля ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ `book.price`. Для этого ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»Π°ΡΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ структура Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ°Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ "index".
485+
486+
### По ΠΊΠ»ΡŽΡ‡Ρƒ
487+
488+
Π‘Π½Π°Ρ‡Π°Π»Π° Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ поиска: ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ.
467489

468490
ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ поиска ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π»ΠΈΠ±ΠΎ Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ, Π»ΠΈΠ±ΠΎ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ "запросы с Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ" -- [IDBKeyRange](https://www.w3.org/TR/IndexedDB/#keyrange) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°ΡŽΡ‚ "Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ".
469491

@@ -474,7 +496,9 @@ request.onerror = function(event) {
474496
- `IDBKeyRange.bound(lower, upper, [lowerOpen], [upperOpen])` ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚: ΠΌΠ΅ΠΆΠ΄Ρƒ `lower` ΠΈ `upper`, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ `open` Ρ€Π°Π²Π΅Π½ `true`.
475497
- `IDBKeyRange.only(key)` -- Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° `key`, Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ.
476498

477-
ВсС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ поиска ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ `query`, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, Π»ΠΈΠ±ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ:
499+
ΠžΡ‡Π΅Π½ΡŒ скоро ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ практичСскиС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΡ… использования.
500+
501+
Для выполнСния фактичСского поиска ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Они ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ `query`, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, Π»ΠΈΠ±ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ:
478502

479503
- `store.get(query)` -- поиск ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ значСния ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈΠ»ΠΈ ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ.
480504
- `store.getAll([query], [count])` -- поиск всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² `count`.
@@ -509,7 +533,6 @@ books.getAllKeys(IDBKeyRange.lowerBound('js', true))
509533
ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ запросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΡ… Π² порядкС сортировки ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ.
510534
```
511535

512-
513536
## Поиск ΠΏΠΎ индСксированному полю
514537

515538
Для поиска ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ полям ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ "индСкс" (index).
@@ -592,6 +615,7 @@ let request = priceIndex.getAll(IDBKeyRange.upperBound(5));
592615
- **`delete(query)`** -- ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… запросу Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.
593616

594617
НапримСр:
618+
595619
```js
596620
// ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ½ΠΈΠ³Ρƒ с id='js'
597621
books.delete('js');
@@ -610,6 +634,7 @@ request.onsuccess = function() {
610634
```
611635

612636
Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всё:
637+
613638
```js
614639
books.clear(); // ΠΎΡ‡ΠΈΡ‰Π°Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.
615640
```
@@ -618,9 +643,7 @@ books.clear(); // ΠΎΡ‡ΠΈΡ‰Π°Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.
618643

619644
Π’Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠ°ΠΊ `getAll/getAllKeys` Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ массив ΠΊΠ»ΡŽΡ‡Π΅ΠΉ/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.
620645

621-
Но Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌ, большС, Ρ‡Π΅ΠΌ доступно памяти.
622-
623-
Π’ΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ `getAll` Π²Π΅Ρ€Π½Ρ‘Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС записи Π² массивС.
646+
Но Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌ, большС, Ρ‡Π΅ΠΌ доступно памяти. Π’ΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ `getAll` Π²Π΅Ρ€Π½Ρ‘Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС записи Π² массивС.
624647

625648
Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ?
626649

@@ -631,6 +654,7 @@ books.clear(); // ΠΎΡ‡ΠΈΡ‰Π°Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.
631654
Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ отсортировано ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, курсор ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ Π² порядкС хранСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ (ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ).
632655

633656
Бинтаксис:
657+
634658
```js
635659
// ΠΊΠ°ΠΊ getAll, Π½ΠΎ с использованиСм курсора:
636660
let request = store.openCursor([query], [direction]);
@@ -728,7 +752,6 @@ try {
728752
} catch(err) {
729753
console.log('ошибка', err.message);
730754
}
731-
732755
```
733756

734757
Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас красивый "плоский асинхронный" ΠΊΠΎΠ΄ ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ `try..catch`.
@@ -771,6 +794,7 @@ await inventory.add({ id: 'js', price: 10, created: new Date() }); // Ошибк
771794
Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ `inventory.add` послС `fetch` `(*)` Π½Π΅ сработаСт, сгСнСрируСтся ошибка "inactive transaction", ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ транзакция ΡƒΠΆΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚Π° ΠΊ этому Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
772795

773796
РСшСниС Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ IndexedDB: Π»ΠΈΠ±ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, Π»ΠΈΠ±ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ Π½Π° части.
797+
774798
1. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всё, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.
775799
2. Π—Π°Ρ‚Π΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ….
776800

@@ -803,8 +827,7 @@ IndexedDB ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ "localStorage Π½Π° стС
803827

804828
1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ Π½Π°Π΄ промисами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ [idb](https://github.com/jakearchibald/idb).
805829
2. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…: `idb.openDb(name, version, onupgradeneeded)`
806-
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ индСксов происходит Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ `onupgradeneeded`.
807-
- ОбновлСниС вСрсии - Π»ΠΈΠ±ΠΎ сравнивая Π½ΠΎΠΌΠ΅Ρ€Π° вСрсий, Π»ΠΈΠ±ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ сущСствуСт, Π° Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚.
830+
- Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ индСксы Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ `onupgradeneeded` ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ вСрсии, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ
808831
3. Для запросов:
809832
- Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ `db.transaction('books')` (ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ readwrite, Ссли Π½Π°Π΄ΠΎ).
810833
- ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² `transaction.objectStore('books')`.

0 commit comments

Comments
Β (0)