การกำหนดขอบเขตในธุรกรรม IndexedDB

IndexedDB คืออะไร

IndexedDB เป็นมาตรฐานเว็บที่เปลี่ยนแปลงไปเพื่อจัดเก็บข้อมูลที่มีโครงสร้างปริมาณมากในเบราว์เซอร์ และสำหรับการค้นหาข้อมูลนี้ที่มีประสิทธิภาพสูงโดยใช้ดัชนี กล่าวคือ IndexedDB เป็นที่เก็บออบเจ็กต์ ซึ่งไม่เหมือนกับฐานข้อมูลเชิงสัมพันธ์ที่มีตารางที่มีแถวและคอลัมน์ของคอลเล็กชัน ซึ่งถือเป็นความแตกต่างที่สำคัญและเป็นพื้นฐานซึ่งส่งผลต่อวิธีที่คุณออกแบบและสร้างแอปพลิเคชัน (ดูข้อมูลเพิ่มเติมเกี่ยวกับแนวคิดพื้นฐาน

มีอะไรใหม่

เปลี่ยนเพื่อนของฉัน... เรามีการเปลี่ยนแปลงบางอย่างจะทำให้เกิดข้อผิดพลาด ถ้าเราไม่จัดการกับเพื่อนเหล่านี้ด้วยการเปลี่ยนแปลงไวยากรณ์อย่างง่าย

ตั้งแต่เวอร์ชัน 17 เป็นต้นไป Chrome จะแสดงข้อผิดพลาดหากธุรกรรม IndexedDB ไม่ได้กำหนดขอบเขตไปยังที่เก็บวัตถุ เนื่องจากการอ่านและเขียนข้อมูลทั้งหมดจะดำเนินการภายในธุรกรรม เราจึงจำเป็นต้องสร้างธุรกรรมบนฐานข้อมูล ระบุขอบเขต (เช่น ที่เก็บออบเจ็กต์ใดที่คุณต้องการเข้าถึง) และระบุประเภทการเข้าถึง (อ่านอย่างเดียวหรือเขียน)

โค้ดนี้หมายถึงอะไร แทนการส่งอาร์เรย์ว่างไปยัง Database.transaction ของเรา:

var transaction = db.transaction([], IDBTransaction.READ_ONLY);

คุณควรกำหนดขอบเขตเป็นที่เก็บออบเจ็กต์ที่เจาะจงหรือรายการ Store ของออบเจ็กต์ ดังนี้

// all stores (equivalent to what use to be marked as empty array. )
var transaction = db.transaction(db.objectStoreNames, IDBTransaction.READ_ONLY);

// multiple stores:
var transaction = db.transaction(['ObjectStoreName1', 'ObjectStoreName2'],
    IDBTransaction.READ_ONLY);

// single store - these are equivalent
var transaction = db.transaction(['ObjectStoreName'], IDBTransaction.READ_ONLY);
var transaction = db.transaction('ObjectStoreName', IDBTransaction.READ_ONLY);

คุณสามารถเพิ่มความเร็วในการเข้าถึงข้อมูลได้โดยใช้ขอบเขตและโหมดที่เหมาะสมในการทำธุรกรรม เคล็ดลับ 2 ข้อมีดังนี้ เมื่อกำหนดขอบเขต ให้ระบุเฉพาะที่เก็บออบเจ็กต์ที่คุณต้องการ วิธีนี้จะช่วยให้เรียกใช้ธุรกรรมหลายรายการที่มีขอบเขตไม่ทับซ้อนกันได้ ระบุโหมดธุรกรรม READ_WRITE เมื่อจำเป็นเท่านั้น คุณเรียกใช้ธุรกรรม READ_ONLY หลายรายการที่มีขอบเขตทับซ้อนกันได้ แต่จะมีธุรกรรม READ_WRITE เพียงรายการเดียวสำหรับที่เก็บออบเจ็กต์หนึ่งๆ ได้

แหล่งที่มาอื่นๆ:

คราวหน้าขอให้ได้เลื่อนขั้นเว็บไปให้ใกล้พื้นที่หลายๆ แห่งแทนนะ