พื้นที่เก็บข้อมูล IndexedDB ที่มีประสิทธิภาพมากขึ้นใน Chrome

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

กลไกพื้นที่เก็บข้อมูลของ Chrome ก่อนเวอร์ชัน 129

Chrome ใช้ LevelDB เพื่อจัดเก็บข้อมูล IndexedDB ในดิสก์ LevelDB เป็นคลังพื้นที่เก็บข้อมูลคีย์-ค่าที่รวดเร็ว แต่อาจทำงานได้ไม่ดีนักเมื่อค่าแต่ละค่ามีขนาดใหญ่เกินขนาดของหน้าฐานข้อมูล ตั้งแต่ปี 2017 Chrome ได้จัดเก็บค่าที่มีขนาดใหญ่กว่าหน้าเว็บเดียวเป็นไฟล์ธรรมดาในดิสก์ควบคู่ไปกับไฟล์ฐานข้อมูลเพื่อแก้ไขปัญหานี้

พื้นที่เก็บข้อมูลจากเวอร์ชัน 129

การบีบอัดค่าขนาดใหญ่

ซึ่งแตกต่างจากเนื้อหาที่จัดเก็บภายในฐานข้อมูล LevelDB โดยตรง ซึ่งจะได้รับการบีบอัดก่อนที่จะเขียนลงในดิสก์และจะคลายการบีบอัดหลังจากอ่านแล้ว แต่ไฟล์ขนาดใหญ่ที่จัดเก็บเป็นไฟล์ธรรมดาจะไม่ได้รับการบีบอัด การอัปเดตใหม่นี้ทำให้ Chrome บีบอัดไฟล์ขนาดใหญ่เหล่านี้โดยใช้ไลบรารีการบีบอัดแบบเรียลไทม์ Snappy ซึ่งจะช่วยประหยัดพื้นที่ได้มาก ซึ่งมีประสิทธิภาพอย่างยิ่งสำหรับ Structured Data เช่น อาร์เรย์ขนาดใหญ่ของค่า JavaScript, XML หรือ JSON การดำเนินการนี้ไม่มีประสิทธิภาพสำหรับไฟล์สื่อที่มีขนาดใหญ่แต่มีการบีบอัดอยู่แล้ว หรือในกรณีที่เว็บไซต์ทำการบีบอัดและแตกไฟล์ด้วยตนเอง ซึ่งพบได้น้อย

ผลกระทบต่อประสิทธิภาพพื้นที่เก็บข้อมูล

หากการบีบอัดทำให้ไฟล์มีขนาดเล็กกว่าขนาดของหน้า LevelDB ระบบจะย้ายข้อมูลกลับไปยัง LevelDB การเปลี่ยนแปลงนี้ไม่เพียงช่วยประหยัดพื้นที่ แต่ยังช่วยลดการดำเนินการ I/O ของดิสก์ ซึ่งจะปรับปรุงประสิทธิภาพโดยรวมด้วย

อัลกอริทึมการบีบอัด Snappy

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

ปรับปรุงประสิทธิภาพ

การบีบอัดและการขยายไฟล์จะจัดการภายในกระบวนการแสดงผล ซึ่งเป็นส่วนหนึ่งของสถาปัตยกรรมแบบหลายกระบวนการของ Chrome ซึ่งจะช่วยลดขนาดของข้อความที่ส่งไปยังกระบวนการเบราว์เซอร์ ซึ่งนำไปสู่การปรับปรุงประสิทธิภาพเพิ่มเติม การทดสอบสังเคราะห์แสดงให้เห็นว่าการอัปเดตนี้สามารถทําให้การดำเนินการบางอย่างเร็วขึ้น 2-3 เท่าจากเดิมเนื่องจากการลด IPC (การสื่อสารระหว่างกระบวนการ) และ I/O ของดิสก์ ในทางปฏิบัติ จากการวัดผลของทีม Chrome พบว่าระบบจะส่งพายโหลด Structured Data ขนาด 1 MB จากดิสก์ไปยังหน้าเว็บในเวลาประมาณ 1/4 ของเวลาทั้งหมด (มีความแปรปรวนสูงโดยขึ้นอยู่กับฮาร์ดแวร์ของอุปกรณ์และกิจกรรมของระบบ)

ผลกระทบต่อนักพัฒนาแอปและผู้ใช้

การเปลี่ยนแปลงเหล่านี้มีความโปร่งใสทั้งต่อนักพัฒนาแอปและผู้ใช้ อย่างไรก็ตาม ผู้ใช้อาจสังเกตเห็นประสิทธิภาพที่ดีขึ้นและการใช้พื้นที่เก็บข้อมูลลดลง

  • ประหยัดพื้นที่: การบีบอัดจะมีผลกับข้อมูลใหม่ที่จัดเก็บหลังจากการอัปเดตนี้เท่านั้น คุณสามารถสังเกตการประหยัดพื้นที่ได้แบบอ้อมๆ โดยใช้ Web API เช่น navigator.storage.estimate() หรือดูในส่วนพื้นที่เก็บข้อมูลในเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome ใต้แผงแอปพลิเคชัน
  • การทดสอบฟีเจอร์: นักพัฒนาซอฟต์แวร์สามารถทดสอบลักษณะการทำงานนี้ใน Chrome เวอร์ชันทดลอง (ก่อน 129) ได้โดยเปิดใช้ฟีเจอร์ด้วย Flag: --enable-features="IndexedDBCompressValuesWithSnappy"

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

ขอขอบคุณ

เอกสารนี้ผ่านการตรวจสอบโดย Evan Stade และ Rachel Andrew