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