Bộ nhớ IndexedDB hiệu quả hơn trong Chrome

Tính năng tối ưu hoá mới trong Chrome cải thiện cách lưu trữ dữ liệu IndexedDB trên ổ đĩa. Tính năng nâng cao này tập trung vào cách quản lý các giá trị lớn trong hệ thống bộ nhớ của Chrome, cụ thể là bằng cách giới thiệu tính năng nén cho một số tệp nhất định được lưu trữ trên ổ đĩa. Bài viết này tóm tắt các điểm chính của bản cập nhật này.

Cơ chế lưu trữ của Chrome trước phiên bản 129

Chrome sử dụng LevelDB để lưu trữ dữ liệu IndexedDB trên ổ đĩa. LevelDB là một thư viện lưu trữ khoá-giá trị nhanh, nhưng gặp khó khăn khi các giá trị riêng lẻ vượt quá kích thước của một trang cơ sở dữ liệu. Để giải quyết vấn đề này, kể từ năm 2017, Chrome đã lưu trữ các giá trị lớn hơn một trang dưới dạng tệp thuần tuý trên ổ đĩa cùng với tệp cơ sở dữ liệu.

Dung lượng lưu trữ từ phiên bản 129

Nén các giá trị lớn

Không giống như nội dung được lưu trữ trực tiếp trong cơ sở dữ liệu LevelDB, được nén trước khi ghi vào ổ đĩa và giải nén sau khi đọc, các tệp lớn được lưu trữ dưới dạng tệp thuần tuý không được nén. Với bản cập nhật mới, Chrome sẽ nén các tệp lớn này bằng thư viện nén theo thời gian thực Snappy, giúp tiết kiệm đáng kể dung lượng. Cách này đặc biệt hiệu quả đối với dữ liệu có cấu trúc, chẳng hạn như các mảng lớn gồm các giá trị JavaScript, XML hoặc JSON. Phương pháp này không hiệu quả đối với các tệp phương tiện có dung lượng lớn nhưng đã được nén, hoặc ít phổ biến hơn là nếu trang web đã tự nén và giải nén.

Ảnh hưởng đến hiệu suất lưu trữ

Nếu quá trình nén làm giảm kích thước tệp xuống dưới kích thước của một trang LevelDB, thì dữ liệu sẽ được chuyển trở lại LevelDB. Thay đổi này không chỉ tiết kiệm dung lượng mà còn giảm các hoạt động I/O của ổ đĩa, cải thiện hiệu suất tổng thể.

Thuật toán nén Snappy

Nhóm Chrome đã chọn Snappy để nén vì công cụ này tối ưu hoá tốc độ thay vì nén tối đa. Quá trình này đủ nhanh để không gây ra bất kỳ tổn thất hiệu suất nào có thể đo lường được trong quá trình nén hoặc giải nén.

Điểm cải tiến về hiệu suất

Quá trình nén và giải nén được xử lý trong quy trình kết xuất, một phần của cấu trúc đa quy trình của Chrome. Điều này làm giảm kích thước của thông báo được gửi đến quy trình trình duyệt, giúp cải thiện hiệu suất hơn nữa. Các điểm chuẩn tổng hợp cho thấy bản cập nhật này có thể giúp một số thao tác nhanh hơn gấp 2 đến 3 lần so với trước do giảm IPC (Giao tiếp liên quy trình) và I/O ổ đĩa. Trong thực tế, theo kết quả đo lường của nhóm Chrome, tải trọng dữ liệu có cấu trúc 1 MB được phân phối từ ổ đĩa đến trang trong khoảng một phần tư thời gian (với độ biến thiên cao dựa trên phần cứng thiết bị và hoạt động hệ thống).

Tác động đến nhà phát triển và người dùng

Cả nhà phát triển và người dùng đều có thể thấy rõ những thay đổi này. Tuy nhiên, người dùng có thể nhận thấy hiệu suất được cải thiện và mức sử dụng bộ nhớ giảm.

  • Tiết kiệm dung lượng: Tính năng nén chỉ áp dụng cho dữ liệu mới được lưu trữ sau bản cập nhật này. Bạn có thể quan sát gián tiếp mức tiết kiệm dung lượng bằng cách sử dụng các API web như navigator.storage.estimate() hoặc trong mục Bộ nhớ trong Công cụ của Chrome cho nhà phát triển, trong bảng điều khiển Ứng dụng.
  • Kiểm thử tính năng: Nhà phát triển có thể kiểm thử hành vi này trong các phiên bản phát hành trước của Chrome (trước phiên bản 129) bằng cách bật tính năng này bằng cờ: --enable-features="IndexedDBCompressValuesWithSnappy".

Bản cập nhật này giúp tăng hiệu quả của Chrome trong việc quản lý các giá trị IndexedDB lớn, giúp tiết kiệm cả không gian và thời gian mà không làm giảm hiệu suất, đánh dấu sự cải thiện đáng kể về cách lưu trữ và truy cập dữ liệu trong trình duyệt. Khi hiểu rõ những thay đổi này, nhà phát triển có thể hưởng lợi từ những nỗ lực liên tục nhằm tối ưu hoá hiệu suất và cơ chế lưu trữ của Chrome, đảm bảo trải nghiệm người dùng mượt mà và hiệu quả hơn.

Lời cảm ơn

Tài liệu này đã được Evan StadeRachel Andrew xem xét.