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

โหมดความคงทนเริ่มต้นใน IndexedDB จะเปลี่ยนจาก strict เป็น relaxed จาก Chrome 121 การปรับเปลี่ยนนี้เพื่อปรับปรุงประสิทธิภาพและเพื่อให้สอดคล้องกับเบราว์เซอร์หลักอื่นๆ เช่น Firefox และ Safari โดยบล็อกโพสต์จะอธิบายรายละเอียดของการเปลี่ยนแปลงนี้และผลกระทบที่มีต่อนักพัฒนาเว็บ

โหมดความคงทนของ IndexedDB

IndexedDB ซึ่งเป็น Web API ที่มีประสิทธิภาพสำหรับการจัดเก็บข้อมูลที่มีโครงสร้างจำนวนมากมีโหมดความคงทน 2 โหมดสำหรับธุรกรรม readwrite รายการดังนี้

  • strict: โหมดนี้จะสั่งให้ระบบปฏิบัติการล้างการเปลี่ยนแปลงไปยังดิสก์อย่างชัดเจนก่อนออกเหตุการณ์ complete
  • relaxed โหมดนี้ใช้ลักษณะการล้างระบบปฏิบัติการเริ่มต้นและตั้งเหตุการณ์ complete หลังการเปลี่ยนแปลงทำให้บัฟเฟอร์ของระบบปฏิบัติการ ซึ่งปกติจะมีการล้างทุก 2-3 วินาที

สิ่งสำคัญที่ควรทราบคือ strict ไม่ได้รับประกันว่าการเปลี่ยนแปลงจะเขียนจริงลงดิสก์ในทันที หลังจากที่เว็บไซต์เรียกใช้ put() แล้ว ยังถือว่ามีเวลาจำกัดอยู่ระยะหนึ่งซึ่งในกรณีที่ไฟฟ้าดับอาจทำให้การเปลี่ยนแปลงไม่กระจายไปยังดิสก์ และส่งผลให้ข้อมูลหายไปในครั้งต่อไปที่แอปทำงาน

สําหรับการรับประกันความคงทน strict เหตุการณ์ complete ของธุรกรรม IndexedDB จะไม่เริ่มทํางานจนกว่าจะหลังจากเขียนข้อมูลจริงๆ ในขณะที่ความคงทน relaxed ข้อมูลจะยังคงอยู่ในกระบวนการเขียนเมื่อเหตุการณ์ complete เริ่มทํางาน (ดูรายละเอียดเพิ่มเติมเกี่ยวกับขั้นตอนทั้งหมดได้ที่คำอธิบายนี้)

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

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

แง่มุมสําคัญของการเปลี่ยนแปลงนี้คือโหมดความคงทนเริ่มต้นสําหรับธุรกรรมของ readwrite ใน Chrome ก่อนหน้านี้ ค่าเริ่มต้นจะเป็น strict ซึ่งจะช่วยให้จะเขียนดิสก์ทันทีสำหรับการเปลี่ยนแปลงข้อมูล อย่างไรก็ตาม เนื่องจากข้อพิจารณาด้านประสิทธิภาพและเพื่อให้สอดคล้องกับเบราว์เซอร์หลักอื่นๆ ทั้งหมดที่ใช้ relaxed ทั้งหมด Chrome จึงวางแผนที่จะเปลี่ยนค่าเริ่มต้นเป็น 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 หากต้องการทดสอบลักษณะการทำงานใหม่ในเครื่องก่อนหน้านี้ ให้สลับธง #indexed-db-default-durability-relaxed ใน chrome://flags

ดูข้อมูลเพิ่มเติม

ดูรายละเอียดทางเทคนิคและข้อมูลอัปเดตเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงนี้ได้ที่ข้อบกพร่องในการติดตามและรายการสถานะ Chrome Platform

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

กิตติกรรมประกาศ

บทความนี้ได้รับการตรวจสอบโดย Evan Stade และ Rachel Andrew