Cara Kerja JS: Penyimpanan

Saat merancang aplikasi web, sangat penting untuk memilih alat yang tepat untuk penyimpanan data lokal. Kita berbicara tentang mekanisme yang akan memungkinkan Anda untuk menyimpan informasi dengan andal, akan membantu mengurangi jumlah data yang ditransfer antara server dan bagian-bagian klien dari aplikasi, dan pada saat yang sama tidak akan memperburuk kecepatan reaksi aplikasi ke paparan pengguna. Strategi yang dipikirkan dengan matang untuk caching data lokal merupakan pusat pengembangan aplikasi web seluler yang dapat bekerja tanpa koneksi internet. Pengguna modern semakin mengacu pada peluang seperti itu sebagai sesuatu yang akrab dan diharapkan.



Hari ini, dalam terjemahan bagian 16 dari serangkaian materi yang ditujukan untuk segala sesuatu yang berhubungan dengan JavaScript, kita akan berbicara tentang mekanisme penyimpanan sisi klien yang dapat digunakan dalam pengembangan web, dan tentang memilih sistem penyimpanan untuk proyek tertentu.


Model data


Model data menentukan organisasi internal dari data yang disimpan. Ini mempengaruhi semua aspek perangkat aplikasi web, itu berisi solusi, sering kompromi, di mana efektivitas aplikasi dan kemampuan sistem penyimpanan untuk menyelesaikan tugasnya tergantung. Tidak ada pendekatan "terbaik" untuk merancang model data, tidak ada solusi universal yang cocok untuk semua aplikasi. Pilihan model data didasarkan pada fitur dan kebutuhan aplikasi tertentu. Pertimbangkan beberapa model penyimpanan data dasar dari mana Anda dapat memilih sesuatu yang cocok untuk proyek tertentu.

  • Model penyimpanan data terstruktur. Saat menggunakan model ini, data disimpan dalam tabel dengan bidang yang telah ditentukan. Pendekatan ini tipikal untuk sistem manajemen basis data berbasis SQL. Sistem seperti itu diadaptasi dengan baik untuk bekerja dengannya menggunakan pertanyaan. Contoh terkenal dari gudang data browser terstruktur adalah IndexedDB (meskipun itu adalah DBMS NoSQL).
  • Model penyimpanan kunci / nilai. Gudang untuk data yang diorganisasikan dalam bentuk pasangan kunci / nilai, dan DBMS NoSQL yang terkait dengannya, memberi pengembang kesempatan untuk menyimpan data yang tidak terstruktur dan mengambilnya dari toko dengan kunci unik mereka. Penyimpanan seperti ini mirip dengan tabel hash dalam arti bahwa mereka memungkinkan Anda untuk mengatur akses ke data yang diindeks dari jenis buram. Contoh bagus penyimpanan nilai / kunci nilai adalah API Cache di browser dan DBMS sisi server Apache Cassandra.
  • Model untuk menyimpan data dalam urutan byte. Menggunakan model sederhana ini, data disimpan sebagai urutan byte dengan panjang variabel. Tugas organisasi internal dari data ini sepenuhnya diselesaikan pada tingkat aplikasi. Model ini digunakan dalam sistem file dan gudang data yang diatur secara hierarkis seperti sistem penyimpanan cloud.

Metode penyimpanan data yang persisten tersedia untuk peramban


Metode penyimpanan yang digunakan dalam aplikasi web dapat dianalisis dalam hal waktu penyimpanan yang persisten dari data tersebut.

  • Penyimpanan data dalam sesi. Data kategori ini disimpan hanya selama sesi web tertentu ada atau tab browser aktif. Contoh mekanisme untuk menyimpan data sesi adalah SessionStorage API.
  • Penyimpanan data pada perangkat tanpa mengacu pada masa pakai sesi. Data ini disimpan pada perangkat tertentu dan di antara sesi, misalnya, ketika Anda menutup tab browser dengan halaman aplikasi web, itu tidak dihapus. Contoh mekanisme untuk menyimpan data aplikasi web pada perangkat adalah Cache API.
  • Penyimpanan data permanen menggunakan penyimpanan global. Pendekatan ini melibatkan penyimpanan data yang tidak hilang di antara sesi dan tidak terikat ke perangkat tertentu. Data tersebut dapat dibagi di antara berbagai perangkat oleh pengguna. Sebagai hasilnya, ini adalah cara yang paling dapat diandalkan dan jangka panjang untuk menyimpan data. Data tersebut tidak dapat disimpan pada perangkat itu sendiri, yang berarti bahwa beberapa jenis penyimpanan server harus digunakan untuk mengatur skema penyimpanan data tersebut. Kami tidak akan membahas ini, karena tugas utama kami adalah mempertimbangkan cara menyimpan data aplikasi web pada perangkat.

Penilaian Penyimpanan Sisi Klien


Saat ini, ada banyak API peramban yang memungkinkan Anda mengatur penyimpanan data. Kami akan melihat beberapa dari mereka dan membandingkannya untuk memudahkan Anda memilih API yang tepat.

Untuk memulainya, bagaimanapun, mari kita membahas beberapa masalah umum yang harus dipertimbangkan sebelum memilih teknologi spesifik untuk menyimpan data. Tentu saja, pertama-tama, Anda perlu memahami bagaimana aplikasi Anda akan digunakan, bagaimana dukungannya akan diatur, dan bagaimana ia direncanakan untuk mengembangkannya. Pada saat yang sama, bahkan jika Anda memiliki jawaban yang jelas untuk pertanyaan-pertanyaan ini, Anda akhirnya dapat pergi ke beberapa opsi untuk sistem penyimpanan data, dari mana Anda harus memilih yang paling cocok. Inilah yang harus Anda perhatikan ketika memilih sistem penyimpanan:

  • Dukungan browser. Harus diingat bahwa yang terbaik adalah memilih API standar yang dikembangkan. Mereka, pertama, memiliki umur yang agak panjang, dan kedua, mereka didukung oleh banyak browser. Selain itu, API serupa biasanya memiliki dokumentasi yang baik dan komunitas pengembang yang aktif.
  • Dukungan transaksi. Terkadang penting bahwa ketika bekerja dengan repositori, set operasi terkait akan memiliki sifat atomisitas, yaitu, bahwa eksekusi set operasi akan berhasil jika semua operasi berhasil, atau jika setidaknya salah satu dari mereka gagal, itu akan gagal. Basis data secara tradisional mendukung fitur ini dengan menggunakan model transaksi yang dapat digunakan untuk mengelompokkan pembaruan data terkait ke dalam blok sewenang-wenang.
  • Operasi sinkron atau asinkron. Beberapa API penyimpanan data bersifat sinkron, dalam arti bahwa operasi menyimpan atau memuat data dari API tersebut memblokir utas aktif hingga permintaan terkait diselesaikan. Menggunakan API sinkron dapat menyebabkan pemblokiran utas utama, yang dapat mengakibatkan "rem" antarmuka pengguna. Karena itu, jika mungkin, coba gunakan API asinkron.

Perbandingan Penyimpanan


Di bagian ini, kita akan melihat beberapa sistem penyimpanan yang ada tersedia untuk pengembang web dan membandingkannya sesuai dengan indikator yang dijelaskan di atas.
API
Model data
Metodologi penyimpanan
Dukungan browser
Dukungan transaksi
Sinkron atau asinkron
Sistem file
Urutan byte
Perangkat
52%
Tidak
Tidak sinkron
Penyimpanan lokal
Kunci / nilai
Perangkat
93%
Tidak
Sinkron
Penyimpanan sesi
Kunci / nilai
Sesi
93%
Tidak
Sinkron
Cookie
Data terstruktur
Perangkat
100%
Tidak
Sinkron
Cache
Kunci / nilai
Perangkat
60%
Tidak
Tidak sinkron
Indexeddb
Model hibrida
Perangkat
83%
Ya
Tidak sinkron

Sekarang mari kita bicara lebih banyak tentang metode penyimpanan data ini.

Sistem File API



Melalui penggunaan FileSystem API, aplikasi web dapat bekerja dengan area yang dipilih dari sistem file lokal pengguna. Aplikasi ini dapat melihat konten penyimpanan, membuat file, melakukan operasi baca dan tulis.

API ini terdiri dari bagian-bagian utama berikut:

  • Mekanisme untuk mengelola file dan membaca file: File/Blob , FileList , FileReader
  • Mekanisme untuk membuat file dan menulis data kepada mereka: Blob , FileWriter
    FileWriter
  • Mekanisme untuk bekerja dengan direktori dan sistem file: DirectoryReader , FileEntry / DirectoryEntry , LocalFileSystem

FileSystem API tidak standar, jadi tidak boleh digunakan dalam produksi, karena itu tidak akan berfungsi untuk semua pengguna. Berbagai implementasi API ini dapat sangat bervariasi, dan sangat mungkin akan berubah di masa mendatang.

Antarmuka filesystem API ini digunakan untuk mewakili sistem file. Akses ke objek terkait dapat diperoleh melalui properti filesystem . Beberapa browser menawarkan API tambahan untuk membuat dan mengelola sistem file.

Antarmuka ini tidak memberikan akses halaman web ke sistem file pengguna. Sebagai gantinya, ini memungkinkan Anda untuk bekerja dengan sesuatu seperti disk virtual, yang terletak di kotak pasir yang dibuat oleh browser. Jika aplikasi Anda membutuhkan akses ke sistem file pengguna, Anda harus menggunakan mekanisme lain.

Aplikasi web dapat meminta akses ke sistem file virtual dengan memanggil window.requestFileSystem() :

 // :    Google Chrome 12: window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem; window.requestFileSystem(type, size, successCallback, opt_errorCallback) 

Jika Anda memanggil requestFileSystem() untuk pertama kalinya, repositori baru akan dibuat untuk aplikasi Anda. Penting untuk diingat bahwa ini adalah penyimpanan yang terisolasi, yaitu, satu aplikasi web tidak dapat bekerja dengan penyimpanan yang dibuat oleh aplikasi lain.

Setelah Anda mendapatkan akses ke sistem file, Anda dapat melakukan sebagian besar operasi standar dengan file dan direktori.

FileSystem API sangat berbeda dari sistem serupa lainnya yang digunakan oleh aplikasi web, karena ditujukan untuk menyelesaikan tugas penyimpanan data pada klien, yang tidak diselesaikan dengan baik oleh alat database. Secara umum, ini adalah aplikasi yang bekerja dengan fragmen besar data biner, atau bertukar data dengan aplikasi di luar browser.

Di antara opsi untuk menggunakan FileSystem API adalah sebagai berikut:

  • Sistem unggah data. Ketika seorang pengguna memilih file atau folder untuk diunggah ke server, data ini disalin ke penyimpanan terisolasi lokal, dan kemudian, di bagian, dikirim ke server.
  • Aplikasi yang menangani sejumlah besar data multimedia - permainan, pemutar musik.
  • Aplikasi pengeditan suara dan gambar yang bekerja tanpa koneksi internet atau menggunakan cache lokal yang besar untuk mempercepat pekerjaan. Data yang digunakan oleh aplikasi tersebut adalah urutan byte yang bisa sangat besar. Penyimpanan untuk data tersebut harus mendukung kemampuan untuk menulis dan membacanya.
  • Pemutar video offline. Program semacam itu perlu mengunduh file besar yang dapat dilihat tanpa koneksi internet. Ini mungkin diperlukan saat streaming data, dan untuk mengatur sistem yang nyaman untuk bergerak di sekitar file.
  • Klien email offline. Program semacam itu dapat mengunduh file yang dilampirkan ke email dan menyimpannya secara lokal.

Ini adalah bagaimana browser mendukung API FileSystem .


Dukungan untuk FileSystem API oleh browser

API Penyimpanan Lokal



API LocalStorage , atau penyimpanan lokal, memungkinkan Anda untuk bekerja dengan objek Penyimpanan objek Dokumen , dengan mempertimbangkan prinsip dari sumber yang sama. Data tidak hilang di antara sesi. API LocalStorage mirip dengan SessionStorage API, penyimpanan sesi, perbedaannya adalah bahwa data dalam penyimpanan sesi dihapus setelah sesi halaman berakhir, dan data dalam penyimpanan lokal disimpan secara permanen.

Harap dicatat bahwa data yang berlokasi di lokal atau di penyimpanan sesi terikat ke sumber halaman, yang ditentukan oleh kombinasi protokol, host dan port.
Berikut adalah LocalStorage informasi dukungan LocalStorage browser LocalStorage untuk berbagai browser.


Dukungan untuk LocalStorage API oleh browser

API SessionStorage


SessionStorage API memungkinkan Anda untuk bekerja dengan objek sesi Penyimpanan . SessionStorage API mirip dengan API LocalStorage yang kita bicarakan di atas. Perbedaan di antara mereka, sebagaimana telah disebutkan, adalah dalam waktu penyimpanan data, yaitu, dalam kasus SessionStorage data disimpan selama sesi berlangsung. Itu berlangsung sampai browser terbuka, sementara itu tetap setelah halaman dimuat ulang. Membuka halaman di tab atau jendela baru akan memulai sesi baru, ini berbeda dari perilaku cookie sesi. Pada saat yang sama, saat bekerja dengan SessionStorage , dan dengan LocalStorage , orang harus ingat bahwa data dalam penyimpanan tersebut terikat ke sumber halaman.

Berikut adalah beberapa dukungan browser untuk SessionStorage API:


Dukungan Browser SessionStorage API

API Cookie



Cookie (cookie, cookie web, cookie browser) adalah informasi kecil yang dikirimkan oleh server ke browser. Browser dapat menyimpannya dan mengirimkannya ke server, menggunakannya saat membuat permintaan. Mereka biasanya digunakan untuk mengidentifikasi instance browser tertentu dari mana permintaan sedang dikirim. Misalnya, agar pengguna, setelah memasuki sistem, tetap di dalamnya. Cookie adalah sejenis sistem penyimpanan informasi status sesi untuk protokol HTTP yang menangani setiap permintaan, bahkan yang berasal dari browser yang sama, sama sekali tidak tergantung pada yang lain.

Cookie digunakan untuk menyelesaikan tiga tugas utama:

  • Manajemen Sesi. Penggunaan cookie didasarkan pada mekanisme seperti sistem entri ke aplikasi web, keranjang belanja di toko online, penyimpanan poin yang diperoleh di game browser. Ini adalah tentang menyimpan segala sesuatu yang perlu diketahui server saat pengguna bekerja dengannya.
  • Personalisasi Cookie digunakan untuk menyimpan data tentang preferensi pengguna, tentang tema yang ia pilih untuk mendesain situs, dan tentang hal-hal serupa lainnya.
  • Pemantauan pengguna. Cookie merekam dan menganalisis perilaku pengguna.

Pada suatu waktu, cookie digunakan sebagai gudang data tujuan umum. Meskipun ini adalah cara yang benar-benar normal untuk menggunakan cookie, terutama ketika mereka adalah satu-satunya cara untuk menyimpan data pada klien, tidak disarankan untuk menggunakannya seperti pada zaman kita, lebih memilih API yang lebih modern. Cookie dikirimkan dengan setiap permintaan, sehingga dapat menurunkan kinerja (terutama pada perangkat seluler).

Ada dua jenis cookie:

  • Cookie sesi. Mereka dihapus setelah sesi. Browser web dapat menggunakan teknik pemulihan sesi, karena sebagian besar cookie sesi disimpan secara permanen, sebagai akibat dari sesi mereka disimpan bahkan setelah menutup dan memulai kembali browser dan membuka halaman yang sesuai.
  • Cookie permanen. Cookies persisten tidak kehilangan relevansi setelah sesi. Mereka memiliki periode penyimpanan tertentu, yang ditentukan oleh tanggal tertentu (atribut Expires ) atau periode waktu tertentu (atribut Max-Age ).

Harap perhatikan bahwa informasi rahasia atau penting lainnya tidak boleh disimpan dalam cookie atau dikirim dalam cookie HTTP, karena seluruh mekanisme bekerja dengan cookie secara inheren tidak aman.

Jika kami berbicara tentang dukungan cookie, maka, karena Anda mungkin sudah mengerti, semua browser mendukungnya.

API Cache



Antarmuka Cache menyediakan mekanisme penyimpanan data untuk pasangan objek Permintaan / Respons yang di -cache. Antarmuka ini didefinisikan dalam spesifikasi yang sama dengan pekerja layanan, tetapi dapat diakses tidak hanya untuk pekerja. Antarmuka Cache juga tersedia dalam lingkup objek window , tidak perlu menggunakannya hanya dengan pekerja layanan.

Sumber tertentu mungkin memiliki beberapa objek Cache bernama. Pengembang bertanggung jawab untuk mengimplementasikan bagaimana skripnya (misalnya, pada pekerja layanan ) menjaga cache tetap up to date. Item yang disimpan dalam cache tidak diperbarui hingga permintaan eksplisit untuk memperbaruinya dibuat, periode penyimpanannya tidak kedaluwarsa, mereka hanya dapat dihapus dari cache. Untuk membuka objek cache bernama, Anda dapat menggunakan perintah CacheStorage.open () , setelah itu Anda dapat mengakses perintah manajemen cache dengan mengaksesnya.

Selain itu, pengembang bertanggung jawab untuk membersihkan cache secara berkala. Setiap browser memiliki batasan hard-kode pada ukuran cache yang dialokasikan untuk sumber tertentu. Anda dapat menggunakan StorageEstimate API untuk mengetahui perkiraan kuota cache.

Browser melakukan segala daya untuk mempertahankan sejumlah ruang cache yang tersedia, tetapi dapat menghapus cache untuk beberapa sumber. Biasanya, browser menghapus seluruh cache, atau tidak memedulikannya sama sekali. Saat menggunakan cache, jangan lupa untuk membedakannya sesuai dengan versi skrip Anda, misalnya, termasuk versi skrip dalam nama cache. Ini dilakukan untuk memastikan operasi yang aman dari berbagai versi skrip dengan cache. Detail dapat ditemukan di sini .

Antarmuka CacheStorage menyediakan penyimpanan untuk objek Cache . Berikut adalah tugas-tugas yang menjadi tanggung jawab antarmuka ini:

  • Memberikan daftar semua cache bernama yang dapat digunakan oleh pekerja layanan , atau jenis pekerja lain. Anda juga dapat bekerja dengan cache melalui objek jendela .
  • Mendukung pemetaan antara nama string dan objek yang sesuai dari tipe Cache .

Untuk mendapatkan instance dari objek Cache , gunakan perintah CacheStorage.open () .

Untuk mengetahui apakah objek Permintaan tertentu adalah kunci dari objek Cache dikelola oleh CacheStorage , gunakan metode CacheStorage.match () .

CacheStorage dapat mengakses CacheStorage melalui properti cache global.

API IndexedDB



API IndexedDB adalah DBMS yang memungkinkan Anda menyimpan data menggunakan browser. Karena ini memungkinkan Anda untuk membuat aplikasi web yang memiliki kemampuan untuk bekerja dengan set data yang kompleks bahkan tanpa koneksi Internet, aplikasi tersebut dapat terasa sama baik dengan dan tanpa koneksi ke server. IndexedDB digunakan dalam aplikasi yang perlu menyimpan data dalam jumlah besar (misalnya, aplikasi seperti itu mungkin seperti katalog film dari layanan sewa tertentu), dan yang tidak perlu mempertahankan koneksi konstan ke jaringan untuk operasi normal (misalnya, ini adalah klien email , task manager, notebook, dan sebagainya).

Di sini kita akan membayar IndexedDB sedikit lebih banyak perhatian daripada teknologi penyimpanan data klien lainnya, karena, di satu sisi, API lain lebih dikenal luas, dan di sisi lain, karena DBed IndexedDB menjadi lebih dan lebih populer karena semakin kompleksnya aplikasi web .

โ– Mekanisme internal IndexedDB


API IndexedDB memungkinkan Anda untuk menyimpan data objek menggunakan "kunci" ke dalam basis data dan membacanya. Semua perubahan yang dilakukan pada basis data terjadi dalam transaksi. Seperti kebanyakan solusi semacam itu, IndexedDB mengikuti kebijakan satu sumber . Akibatnya, aplikasi hanya dapat mengakses data milik domainnya sendiri, tetapi bukan data dari domain lain.

IndexedDB adalah API asinkron yang dapat digunakan di sebagian besar konteks, termasuk pekerja web . Sebelumnya, ada versi sinkron dari API ini yang ditujukan untuk pekerja web, tetapi dihapus dari spesifikasi karena fakta bahwa itu tidak terlalu menarik bagi pengembang web.

IndexedDB memiliki pesaing dalam menghadapi database WebSQL, tetapi pekerjaan pada standar ini dihentikan oleh W3C beberapa tahun yang lalu. Walaupun IndexedDB dan WebSQL adalah solusi untuk menyimpan data pada klien, fungsinya berbeda. WebSQL adalah DBMS relasional, dan IndexedDB adalah sistem berdasarkan tabel yang diindeks.

Anda seharusnya tidak mulai bekerja dengan IndexedDB, berdasarkan ide yang dipelajari dari pengalaman dengan DBMS lainnya. Sebagai gantinya, akan bermanfaat untuk membaca dokumentasi untuk database ini dengan cermat dan menggunakan metode yang dirancang untuk bekerja dengannya. Berikut ini adalah ikhtisar singkat tentang konsep dasar IndexedDB:

  • Database IndexedDB menyimpan data dalam format kunci / nilai. Nilai dapat berupa objek terstruktur yang kompleks, dan kunci dapat menjadi properti dari objek tersebut. Indeks dapat dibuat berdasarkan properti objek apa pun, yang dapat mempercepat pencarian data dan menyederhanakan penyortirannya. Kunci juga objek biner.
  • IndexedDB DBMS dibangun berdasarkan model transaksional. Semua operasi yang dilakukan dengan database selalu terjadi dalam konteks transaksi . Akibatnya, misalnya, Anda tidak dapat menjalankan perintah atau membuka kursor di luar transaksi. Selain itu, transaksi dikonfirmasi secara otomatis, mereka tidak dapat dikonfirmasi secara manual.
  • API IndexedDB, untuk sebagian besar, tidak sinkron. API ini tidak menyediakan data yang diminta, hanya mengembalikannya sebagai respons terhadap beberapa perintah. Sebaliknya, saat meminta data, Anda harus meneruskan fungsi panggilan balik ke metode yang sesuai. Pendekatan sinkron tidak digunakan untuk menyimpan data ke database atau memuatnya. Sebagai gantinya, aplikasi membuat kueri basis data yang menjelaskan operasi yang diperlukan. Setelah operasi selesai, suatu peristiwa terjadi yang memberi tahu aplikasi bahwa operasi itu selesai atau tidak. Pendekatan ini tidak terlalu berbeda dari API XMLHttpRequest , atau banyak mekanisme JavaScript lainnya.
  • IndexedDB menggunakan banyak pertanyaan. Permintaan adalah objek yang menerima acara tentang keberhasilan atau kegagalan operasi. Mereka memiliki properti onsuccess dan onerror yang Anda dapat menetapkan pendengar untuk acara yang sesuai, serta readyState , result , errorCode , yang dapat dianalisis untuk mengetahui status permintaan.
  • IndexedDB adalah database berorientasi objek. Ini bukan DBMS relasional yang tabelnya adalah kumpulan baris dan kolom. Fitur mendasar ini memengaruhi cara Anda mendesain dan membangun aplikasi menggunakan IndexedDB.
  • IndexedDB tidak menggunakan SQL. DBMS ini menerapkan kueri indeks yang mengembalikan kursor yang digunakan untuk bekerja dengan kumpulan data yang merupakan hasil kueri. Jika Anda tidak terbiasa dengan sistem NoSQL, lihat materi ini .
  • Penyimpanan IndexedDB menerapkan kebijakan sumber tunggal. Sumber adalah kombinasi dari domain, protokol, dan URL port dari dokumen tempat skrip dieksekusi. Setiap sumber hanya dapat bekerja dengan set databasenya sendiri, sementara masing-masing database memiliki nama unik yang mengidentifikasinya dalam database dari satu sumber.

โ– Keterbatasan IndexedDB


Sistem IndexedDB dirancang dengan harapan bahwa kemampuannya harus memadai untuk menyelesaikan sebagian besar tugas penyimpanan data di sisi klien. Jelas bahwa ini bukan sistem universal yang cocok untuk kasus penggunaan apa pun. Berikut adalah beberapa situasi yang tidak dirancang:

  • Menyortir data sesuai dengan karakteristik berbagai bahasa. Tidak dalam semua bahasa, string diurutkan dengan cara yang sama, dan IndexedDB tidak mendukung pengurutan berdasarkan karakteristik berbagai bahasa. Pada saat yang sama, meskipun database tidak dapat melakukan penyortiran seperti itu, informasi yang diperoleh dari database dapat disortir oleh aplikasi.
  • Sinkronkan API tidak dirancang dengan mempertimbangkan kemungkinan sinkronisasi database lokal dengan server. Sinkronisasi seperti itu, tentu saja, dimungkinkan, tetapi pengembang harus menerapkan mekanisme yang sesuai secara mandiri.
  • Pencarian teks lengkap. API IndexedDB tidak mendukung sesuatu seperti pernyataan LIKE dari SQL.

Selain itu, ketika bekerja dengan IndexedDB, perlu diingat bahwa browser dapat menghapus database dalam kasus berikut:

  • Pengguna memberi perintah untuk menghapus data. Banyak browser memiliki bagian pengaturan, di mana ada alat yang memungkinkan pengguna untuk menghapus semua data yang disimpan untuk situs web, termasuk cookie, bookmark, kata sandi yang disimpan, dan data IndexedDB.
  • Browser berfungsi dalam mode anonim. Mode seperti itu disebut berbeda di browser yang berbeda. Di Chrome itu adalah "mode penyamaran", di Firefox itu adalah "mode pribadi". Setelah sesi anonim berakhir, browser akan menghapus database.
  • Disk overflow atau mencapai batas yang telah ditentukan.
  • Korupsi data.

Secara umum, dapat dicatat bahwa pengembang browser berusaha untuk tidak menghapus database IndexedDB kecuali benar-benar diperlukan.

Berikut adalah informasi tentang dukungan IndexedDB di berbagai browser.


Dukungan untuk IndexedDB oleh berbagai browser

Memilih Sistem Penyimpanan


Seperti yang telah disebutkan, mengingat kebutuhan aplikasi, yang terbaik adalah memilih sistem penyimpanan yang memiliki dukungan browser luas dan bekerja dalam mode asinkron, yang meminimalkan dampaknya pada antarmuka pengguna. Kriteria ini secara alami mengarah pada teknologi berikut:

  • Untuk penyimpanan informasi offline, gunakan API Cache . Ini tersedia di browser apa pun yang mendukung pekerja layanan , yang diperlukan untuk membuat aplikasi web yang dapat bekerja tanpa koneksi internet. API Cache adalah pilihan ideal untuk menyimpan sumber daya tertentu yang terkait dengan halaman.
  • Untuk menyimpan data yang membentuk keadaan aplikasi, atau beberapa informasi yang dibuat oleh pengguna, gunakan IndexedDB. Teknologi ini, dibandingkan dengan caching, mendukung lebih banyak browser, yang memperluas kemampuan pengguna aplikasi berdasarkan IndexedDB untuk bekerja offline.

Ringkasan


, SessionStack API . , , - , . , , , - .

Pembaca yang budiman! -?

Source: https://habr.com/ru/post/id415505/


All Articles