การเปลี่ยนแปลงโหมดความคงทนเริ่มต้นใน IndexedDB

โหมดความคงทนเริ่มต้นใน 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