โหมดความคงทนเริ่มต้นใน IndexedDB จะเปลี่ยนจาก strict
เป็น relaxed
ตั้งแต่ Chrome 121 การปรับนี้มีไว้เพื่อปรับปรุงประสิทธิภาพและเพื่อให้สอดคล้องกับเบราว์เซอร์หลักอื่นๆ เช่น Firefox และ Safari บล็อกโพสต์นี้จะอธิบายรายละเอียดของการเปลี่ยนแปลงนี้และผลกระทบที่มีต่อนักพัฒนาเว็บ
โหมดความทนทานของ IndexedDB
IndexedDB เป็น Web API ที่มีประสิทธิภาพสำหรับจัดเก็บ Structured Data จำนวนมาก ซึ่งมีโหมดความคงทน 2 โหมดสําหรับธุรกรรม readwrite
ดังนี้
strict
: โหมดนี้จะสั่งให้ระบบปฏิบัติการล้างการเปลี่ยนแปลงลงในดิสก์อย่างชัดเจนก่อนที่จะออกเหตุการณ์complete
relaxed
โหมดนี้ใช้ลักษณะการล้างข้อมูลเริ่มต้นของระบบปฏิบัติการและสร้างเหตุการณ์complete
หลังจากที่การเปลี่ยนแปลงไปยังบัฟเฟอร์ของระบบปฏิบัติการ ซึ่งโดยปกติจะล้างข้อมูลทุก 2-3 วินาที
โปรดทราบว่า strict
ไม่ได้รับประกันว่าระบบจะเขียนการเปลี่ยนแปลงลงในดิสก์ทันที หลังจากเว็บไซต์เรียกใช้ put()
แล้ว ระบบจะยังใช้เวลาอีกระยะหนึ่ง ซึ่งอาจทำให้ไฟฟ้าดับและการเปลี่ยนแปลงไม่บันทึกลงในดิสก์ และการเปลี่ยนแปลงดังกล่าวจะหายไปเมื่อแอปทำงานครั้งถัดไป
ในส่วนของการรับประกันความคงทนระดับstrict
ระบบจะไม่เรียกเหตุการณ์ complete
ของธุรกรรม IndexedDB จนกว่าจะหลังจากมีการเขียนข้อมูลจริง ส่วนความคงทนระดับrelaxed
ข้อมูลจะยังอยู่ในกระบวนการเขียนเมื่อเหตุการณ์ complete
เริ่มต้น (ดูรายละเอียดเพิ่มเติมเกี่ยวกับกระบวนการทั้งหมดได้ที่คำอธิบายนี้)
ดังนั้น strict
จึงมีไว้สําหรับการดำเนินการที่คุณจําเป็นต้องทราบว่ามีการเขียนก่อนที่จะดําเนินการขั้นตอนถัดไป การย้ายข้อมูลเป็นตัวอย่างที่ต้องใช้strict
ความคงทน เมื่อย้ายจากพื้นที่เก็บข้อมูลสำรองหนึ่งไปยังอีกพื้นที่หนึ่ง คุณไม่ควรลบรูปแบบเก่าจนกว่าจะมีการเขียนรูปแบบใหม่ วิธีนี้ช่วยให้strict
ความทนทานช่วยอำนวยความสะดวกในขั้นตอนการย้ายข้อมูลซึ่งสามารถกู้คืนจากการไม่สําเร็จได้ในช่วงกลางคัน
การเปลี่ยนแปลงโหมดความทนทานเริ่มต้น
สิ่งสำคัญของการเปลี่ยนแปลงนี้คือโหมดความคงทนเริ่มต้นสำหรับธุรกรรม readwrite
ใน Chrome ก่อนหน้านี้ ค่าเริ่มต้นคือ strict
เพื่อให้แน่ใจว่ามีการเขียนข้อมูลลงในดิสก์ทันทีเมื่อมีการเปลี่ยนแปลง อย่างไรก็ตาม Chrome วางแผนที่จะเปลี่ยนค่าเริ่มต้นเป็น relaxed
ด้วยเช่นกันเพื่อพิจารณาด้านประสิทธิภาพและเพื่อให้สอดคล้องกับเบราว์เซอร์หลักอื่นๆ ทั้งหมดที่ใช้ relaxed
การเปลี่ยนแปลงนี้ออกแบบมาเพื่อรักษาสมดุลระหว่างประสิทธิภาพและความคงทนของข้อมูลให้ดียิ่งขึ้น แม้ว่า strict
จะมีความทนทานของข้อมูลสูงสุด แต่ relaxed
ก็มักจะเพียงพอสําหรับเว็บแอปพลิเคชันจํานวนมาก และสามารถปรับปรุงประสิทธิภาพได้อย่างมากในลักษณะต่อไปนี้
- ความเร็ว - จากตัวอย่างการใช้งานจริง ทีม Chrome พบว่าความเร็วเพิ่มขึ้น 3-30 เท่า
- ความทนทานของดิสก์ โดยเฉพาะอย่างยิ่งสำหรับอุปกรณ์ที่มี Solid State Disk (SSD)
- อายุการใช้งานแบตเตอรี่ที่นานขึ้น
- ความเร็วในการอ่านที่ดีขึ้น สถาปัตยกรรมของ IndexedDB ซึ่งมักมีการบล็อกธุรกรรมการอ่านไว้เบื้องหลังธุรกรรมการเขียน ทำให้ความเร็วในการอ่านได้รับการปรับปรุงเป็นผลกระทบรอง
- อุปกรณ์ทั้งเครื่องจะได้รับผลกระทบในเชิงบวก เนื่องจากการดำเนินการกับดิสก์เป็นทรัพยากรระบบที่แชร์
ความสามารถในการทำงานร่วมกันและความเข้ากันได้
แง่มุมสำคัญอย่างหนึ่งของการเปลี่ยนแปลงนี้คือผลกระทบต่อความสามารถในการทำงานร่วมกันและการทำงานร่วมกันได้ Chromium ปรับปรุงความสามารถในการทำงานร่วมกันด้วยการปรับเปลี่ยนให้สอดคล้องกับลักษณะการทำงานของผู้ให้บริการเบราว์เซอร์รายใหญ่รายอื่นๆ มาตรฐานนี้อนุญาตให้มีการใช้งานที่แตกต่างกัน และการเปลี่ยนแปลงนี้มีจุดประสงค์เพื่อปรับการใช้งานเหล่านั้นให้สอดคล้องกัน ดูบริบทย้อนหลังเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงนี้ได้ในปัญหา GitHub นี้
การเปลี่ยนแปลงนี้ส่งผลต่อนักพัฒนาเว็บอย่างไร
การเปลี่ยนแปลงนี้ไม่ได้เปิดตัวแพลตฟอร์ม API ใหม่ IndexedDB API ที่มีอยู่จะยังคงเหมือนเดิม และการเปลี่ยนแปลงนี้ส่งผลต่อลักษณะการทำงานเริ่มต้นของธุรกรรม readwrite
เป็นหลัก คุณสามารถระบุโหมดความคงทนที่ต้องการเมื่อสร้างธุรกรรม ซึ่งจะช่วยให้คุณควบคุมความคงทนและประสิทธิภาพของข้อมูลได้ ตัวอย่างโค้ดต่อไปนี้แสดงวิธีคืนค่าลักษณะการทำงานแบบเก่าโดยการตั้งค่า durability
เป็น strict
ในอาร์เรย์ตัวเลือกที่ไม่บังคับ
let db;
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = (event) => {
db = DBOpenRequest.result;
};
const transaction = db.transaction(
['toDoList'],
'readwrite',
{ durability: 'strict' });
ทดสอบการเปลี่ยนแปลงในเครื่องก่อนเผยแพร่
การเปลี่ยนแปลงนี้จะมีผลใน Chrome 121 หากต้องการทดสอบลักษณะการทำงานใหม่ในเครื่องก่อน ให้สลับ Flag #indexed-db-default-durability-relaxed
ใน chrome://flags
ดูข้อมูลเพิ่มเติม
ดูรายละเอียดทางเทคนิคและการอัปเดตเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงนี้ได้ที่ข้อบกพร่องการติดตามและรายการสถานะ Chrome Platform
โดยสรุปแล้ว การเปลี่ยนแปลงของ Chrome ในการเปลี่ยนโหมดความคงทนเริ่มต้นใน IndexedDB มีจุดประสงค์เพื่อปรับปรุงประสิทธิภาพไปพร้อมกับคงความเข้ากันได้กับเบราว์เซอร์หลักอื่นๆ ในกรณีส่วนใหญ่ เราขอแนะนําว่าไม่ต้องดําเนินการใดๆ เนื่องจากค่าเริ่มต้นใหม่จะช่วยปรับปรุงประสิทธิภาพ หากจำเป็น คุณสามารถระบุโหมดความทนทานที่ต้องการต่อไปเพื่อควบคุมความทนทานของข้อมูลและประสิทธิภาพในเว็บแอปพลิเคชัน
ขอขอบคุณ
บทความนี้ผ่านการตรวจสอบโดย Evan Stade และ Rachel Andrew