Thay đổi đối với chế độ bền mặc định trong IndexedDB

Chế độ bền mặc định trong IndexedDB thay đổi từ strict thành relaxed từ Chrome 121. Việc điều chỉnh này nhằm nâng cao hiệu suất và phù hợp với các trình duyệt chính khác như Firefox và Safari. Bài đăng trên blog này giải thích thông tin chi tiết về sự thay đổi này và ý nghĩa của thay đổi này đối với nhà phát triển web.

Chế độ bền vững của IndexedDB

IndexedDB, một API web mạnh mẽ dùng để lưu trữ một lượng lớn dữ liệu có cấu trúc, cung cấp hai chế độ bền vững cho các giao dịch readwrite:

  • strict: chế độ này hướng dẫn rõ ràng cho hệ điều hành xoá các thay đổi vào ổ đĩa trước khi đưa ra sự kiện complete.
  • relaxed Chế độ này dựa vào hành vi xả dữ liệu mặc định của hệ điều hành và đưa ra sự kiện complete sau khi các thay đổi được đưa vào vùng đệm hệ điều hành. Quá trình này thường được xả sau mỗi vài giây.

Điều quan trọng cần lưu ý là strict không đảm bảo rằng các thay đổi thực sự được ghi ngay lập tức vào ổ đĩa. Sau khi một trang web gọi put(), vẫn sẽ có một khoảng thời gian hữu hạn mà trong đó lỗi nguồn có thể khiến thay đổi không được lưu vào ổ đĩa và do đó bị thiếu vào lần chạy tiếp theo.

Để đảm bảo về độ bền của strict, sự kiện complete của giao dịch IndexedDB không được kích hoạt cho đến sau khi dữ liệu thực sự được ghi. Trong khi đó, với độ bền của relaxed, dữ liệu vẫn đang trong quá trình được ghi khi sự kiện complete kích hoạt. (Để biết thêm thông tin về toàn bộ quy trình, hãy xem nội dung giải thích này).

Vì vậy, strict thực sự chỉ dành cho các thao tác mà bạn hoàn toàn cần phải biết mã này đã được viết trước khi thực hiện thao tác tiếp theo. Di chuyển dữ liệu là một ví dụ về yêu cầu độ bền của strict. Khi chuyển từ cửa hàng sao lưu sang cửa hàng sao lưu khác, bạn không muốn xoá định dạng cũ cho đến khi định dạng mới được ghi. Bằng cách này, độ bền của strict tạo điều kiện thuận lợi cho một quy trình di chuyển để có thể khắc phục lỗi sau một nửa thời gian.

Thay đổi chế độ độ bền mặc định

Yếu tố quan trọng của thay đổi này là chế độ bền vững mặc định cho các giao dịch readwrite trong Chrome. Cho đến nay, giá trị mặc định là strict, đảm bảo ghi ngay vào ổ đĩa để thay đổi dữ liệu. Tuy nhiên, do những điều cần cân nhắc về hiệu suất và để phù hợp với các trình duyệt chính khác đều sử dụng relaxed, Chrome cũng dự định thay đổi chế độ mặc định thành relaxed.

Thay đổi này được thiết kế để mang lại sự cân bằng tốt hơn giữa hiệu suất và độ bền vững của dữ liệu. Mặc dù strict đảm bảo dữ liệu bền vững tối đa, nhưng relaxed thường đủ cho nhiều ứng dụng web và có thể cải thiện đáng kể hiệu suất theo những cách sau

  • Tốc độ—trong ví dụ thực tế, nhóm Chrome đã nhận thấy sự cải thiện tốc độ từ hệ số 3 đến 30.
  • Độ bền của ổ đĩa, đặc biệt là đối với các thiết bị có Ổ đĩa thể rắn (SSD).
  • Thời lượng pin kéo dài.
  • Cải thiện tốc độ đọc. Do kiến trúc của IndexedDB (trong đó các giao dịch đọc thường bị chặn sau các giao dịch ghi), tốc độ đọc được cải thiện dưới dạng hiệu ứng phụ.
  • Toàn bộ thiết bị đều chịu ảnh hưởng tích cực vì các hoạt động của ổ đĩa là một tài nguyên hệ thống dùng chung.

Khả năng tương thích và tương thích

Một khía cạnh quan trọng của thay đổi này là tác động đến khả năng tương tác và khả năng tương thích. Chromium cải thiện khả năng tương tác bằng cách điều chỉnh cho phù hợp với hành vi của các nhà cung cấp trình duyệt lớn khác. Bản thân tiêu chuẩn cho phép các cách triển khai khác nhau và sự thay đổi này nhằm mục đích hài hoà những cách triển khai đó. Bạn có thể tìm thêm bối cảnh trước đây về thay đổi này trong Vấn đề này trên GitHub.

Ảnh hưởng đối với nhà phát triển web

Thay đổi này không giới thiệu nền tảng API mới nào. API IndexedDB hiện tại vẫn giữ nguyên và thay đổi này chủ yếu ảnh hưởng đến hành vi mặc định của các giao dịch readwrite. Bạn có thể chỉ định chế độ bền vững ưu tiên khi tạo giao dịch, giúp bạn kiểm soát độ bền và hiệu suất của dữ liệu. Mã mẫu sau đây cho biết cách khôi phục hành vi cũ, bằng cách đặt durability thành strict trong mảng tuỳ chọn không bắt buộc.

let db;
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = (event) => {
  db = DBOpenRequest.result;
};
const transaction = db.transaction(
  ['toDoList'],
  'readwrite',
  { durability: 'strict' });

Kiểm thử thay đổi trên thiết bị trước khi gửi

Thay đổi này sẽ có hiệu lực trong Chrome 121. Nếu bạn muốn kiểm thử hành vi mới trên máy trước đó, hãy bật/tắt cờ #indexed-db-default-durability-relaxed trong chrome://flags.

Tìm hiểu thêm

Để biết thêm thông tin kỹ thuật và thông tin cập nhật về thay đổi này, hãy xem lỗi theo dõimục Trạng thái nền tảng Chrome.

Tóm lại, quyết định thay đổi chế độ bền vững mặc định của Chrome trong IndexedDB nhằm mục đích cải thiện hiệu suất trong khi vẫn duy trì khả năng tương thích với các trình duyệt chính khác. Trong hầu hết các trường hợp, bạn không nên làm gì cả, vì chế độ mặc định mới sẽ giúp nâng cao hiệu suất. Nếu cần, bạn có thể tiếp tục chỉ định chế độ bền ưu tiên, kiểm soát độ bền và hiệu suất của dữ liệu trong các ứng dụng web.

Xác nhận

Bài viết này đã được Evan StadeRachel Andrew đánh giá.