Bật bfcache cho Cache-Control: no-store

Xuất bản: Ngày 21 tháng 10 năm 2024, Lần cập nhật gần đây nhất: Ngày 9 tháng 9 năm 2025

Chrome đang thực hiện một thay đổi để cho phép sử dụng bộ nhớ đệm lui/tiến (bfcache) cho các trang sử dụng Cache-Control: no-store khi việc này an toàn. Tìm hiểu ý nghĩa của thay đổi này đối với nhà phát triển.

Thông tin khái quát

Đặt Cache-Control: no-store làm Tiêu đề HTTP là một tín hiệu cho biết trang không được lưu trữ trong bộ nhớ đệm HTTP. Bạn nên sử dụng chỉ thị này cho những trang chứa dữ liệu nhạy cảm (ví dụ: cho những trang khi người dùng đăng nhập), nhưng chỉ thị no-store thường được dùng trên những trang không chứa dữ liệu nhạy cảm.

Với bfcache, thay vì huỷ một trang khi người dùng di chuyển khỏi trang đó, chúng ta sẽ hoãn huỷ và tạm dừng việc thực thi JS. Nếu người dùng nhanh chóng quay lại, chúng tôi sẽ hiển thị lại trang và huỷ tạm dừng việc thực thi JS. Điều này giúp người dùng chuyển trang gần như ngay lập tức.

Mặc dù không bắt buộc theo quy cách HTML, nhưng các trình duyệt thường coi Cache-Control: no-store là tín hiệu để tránh đặt trang vào bộ nhớ đệm chuyển tiếp/quay lại. Đây là lý do lớn nhất khiến bfcache không được sử dụng, chiếm khoảng 17% số lượt điều hướng trong nhật ký trên thiết bị di động và 7% số lượt điều hướng trong nhật ký trên máy tính. Điều này có nghĩa là những trang này không được hưởng lợi từ tính năng khôi phục nhanh và phải tải lại toàn bộ trang, bao gồm mọi lệnh gọi mạng, quá trình thực thi JavaScript và kết xuất.

Thông thường, Cache-Control: no-store được đặt để tránh các vấn đề về lưu vào bộ nhớ đệm khi trang web thay đổi, nhưng lý do này ít liên quan hơn khi sử dụng bfcache, vì toàn bộ trang được khôi phục gần như thể trang đó vẫn luôn mở.

Cách Chrome thay đổi hành vi này

Chrome đã thông báo ý định thay đổi hành vi này nhưng đang áp dụng một cách tiếp cận thận trọng đối với thay đổi này. Chúng tôi đã tiến hành các thử nghiệm kể từ Chrome 116, tăng dần tỷ lệ tải trang và dự kiến đạt 100% vào tháng 3 và tháng 4 năm 2025.

Dữ liệu nhạy cảm

Mặc dù kết quả phân tích của chúng tôi cho thấy phần lớn các thao tác điều hướng về trước hoặc về sau không chứa dữ liệu nhạy cảm và do đó đủ điều kiện để lưu vào bfcache, nhưng vẫn có những trường hợp mà các trang không nên được đặt trong bfcache. Ví dụ: khi đăng xuất, người dùng không thể truy xuất một trang đã đăng nhập bằng cách di chuyển qua lại.

Để tránh điều này, Chrome sẽ loại bỏ một trang khỏi bộ nhớ đệm chuyển tiếp và quay lại khi có thay đổi về cookie hoặc các phương thức uỷ quyền khác.

Ngoài ra, việc sử dụng các API sau đây cho những trang sử dụng Cache-Control: no-store sẽ tiếp tục khiến những trang đó không đủ điều kiện dùng bộ nhớ đệm cho thao tác tiến/lùi:

Xin lưu ý rằng đây không phải là danh sách đầy đủ các API ngăn chặn việc sử dụng bfcache, mà là các API chặn bfcache trên các trang Cache-Control: no-store ngay cả khi chúng không được sử dụng tại thời điểm rời khỏi trang.

Thời gian chờ bộ nhớ đệm cho thao tác tiến/lùi đối với các trang Cache-Control: no-store cũng giảm xuống còn 3 phút (từ 10 phút được dùng cho những trang không sử dụng Cache-Control: no-store) để giảm thêm rủi ro.

Lựa chọn không tham gia dành cho doanh nghiệp

Các doanh nghiệp thường có phần mềm khó cập nhật và thiết bị dùng chung. Bạn có thể tắt chính sách AllowBackForwardCacheForCacheControlNoStorePageEnabled để tiếp tục ngăn chặn việc sử dụng bfcache cho các trang Cache-Control: no-store.

Kiểm thử thay đổi

Nhà phát triển có thể kiểm thử thay đổi này bằng cờ sau:

--enable-features=CacheControlNoStoreEnterBackForwardCache:level/restore-unless-cookie-change

Nếu có bất kỳ trường hợp ngoại lệ nào trước đó được áp dụng (ví dụ: cookie thay đổi), thì điều này sẽ ngăn trang sử dụng bfcache với lý do "Những trang có tài nguyên chính là Cache-Control: no-store không thể chuyển vào bộ nhớ đệm cho thao tác tiến/lùi" xuất hiện trong trình kiểm thử bfcache của Công cụ cho nhà phát triển Chrome.

Bạn có thể sử dụng trang kiểm thử bfcache này để kiểm thử có hoặc không có cờ này.

Những điều nhà phát triển cần biết

Mặc dù nhà phát triển không cần thực hiện bất kỳ thay đổi nào để người dùng của họ có thể hưởng lợi từ việc sử dụng bfcache nhiều hơn, nhưng có một số điều mà họ có thể cần cân nhắc do thay đổi này. Đây là những điểm tương đồng mà các trang web khác có thể gặp phải trong lần ra mắt ban đầu của bfcache vào tháng 12 năm 2021.

Nhà phát triển có nên tiếp tục giảm mức sử dụng Cache-Control: no-store không?

bfcache được bật cho Cache-Control: no-store trong các trường hợp hạn chế đã đề cập trước đó và chỉ dành cho Chrome. Các trình duyệt khác vẫn có thể chặn việc sử dụng bfcache khi dùng Cache-Control: no-store.

Phương pháp hay nhất vẫn là giảm thiểu việc sử dụng Cache-Control: no-store thay vì dựa vào các phương pháp phỏng đoán này.

Tác động đến hiệu suất

Lý do chúng tôi thực hiện thay đổi này là để cải thiện trải nghiệm trên trang cho người dùng trên web. Chúng tôi nhận thấy Các chỉ số quan trọng chính của trang web đã được cải thiện đáng kể khi chúng tôi ra mắt bộ nhớ đệm chuyển tiếp và quay lại lần đầu tiên. Giờ đây, chúng tôi muốn mang những điểm cải thiện đó đến nhiều trang web hơn.

Chủ sở hữu trang web có thể thấy Chỉ số quan trọng chính của trang web được cải thiện khi tính năng này ra mắt và có thể đo lường mức sử dụng bfcache trong CrUX, kể cả trong CrUX Vis.

Số liệu phân tích về tác động

Các trang được khôi phục từ bfcache sẽ "khôi phục" trang cũ (bao gồm cả heap JavaScript) thay vì tải lại trang. Nhiều nhà cung cấp dịch vụ phân tích phổ biến không đo lường lượt khôi phục bfcache dưới dạng lượt xem trang mới vì họ chỉ kích hoạt lượt xem trang khi các trang đó được tải ban đầu.

Do đó, các trang web có thể thấy số lượt tải trang giảm trong số liệu phân tích khi bắt đầu sử dụng bộ nhớ đệm chuyển tiếp và quay lại lần đầu tiên. Bạn nên xem xét những sự kiện này dưới dạng lượt xem trang bằng cách đặt trình nghe cho sự kiện pageshow và kiểm tra thuộc tính persisted:

// Send a pageview when the page is first loaded.
gtag('event', 'page_view');

// Send another pageview if the page is restored from bfcache.
window.addEventListener('pageshow', (event) => {
  if (event.persisted) {
    // Page was restored from bfcache, sent another page view.
    gtag('event', 'page_view');
  }
});

Xử lý thông tin cập nhật khi khôi phục trang

Vì các trang web hiện có thể thấy mức sử dụng bộ nhớ đệm chuyển tiếp/quay lại (bfcache) khi trước đây họ không thấy và khi trang sẽ được tải lại hoàn toàn bằng dữ liệu mới, nên các nhà phát triển có thể muốn cân nhắc việc làm mới dữ liệu khi khôi phục bfcache.

Bạn có thể kích hoạt các bản cập nhật theo cách tương tự như ghi nhật ký lượt xem trang bổ sung cho hoạt động phân tích bằng cách sử dụng sự kiện pageshow và kiểm tra thuộc tính persisted.

Xin lưu ý rằng không phải nội dung nào cũng cần được cập nhật và người dùng có thể muốn quay lại nội dung mà họ đã xem trước đó. Ví dụ: việc làm mới danh sách bài viết có thể khiến người dùng không còn thấy bài viết mà họ đang quay lại xem.

Ảnh hưởng đến quảng cáo

Tương tự như tác động đến số liệu phân tích, các trang web có thể thấy số lượt hiển thị quảng cáo giảm nếu quảng cáo chỉ tải khi trang tải. Quảng cáo có thể được làm mới theo chương trình khi khôi phục bfcache để đảm bảo tính tương đồng với việc tải toàn bộ trang, một lần nữa sử dụng sự kiện pageshow và kiểm tra thuộc tính persisted nhưng không phải lúc nào cũng là việc nên làm. Hãy tham khảo tài liệu của nhà cung cấp quảng cáo về cách kích hoạt việc tải lại quảng cáo.

Thông tin khác về bfcache

Để biết thêm thông tin về bfcache, hãy xem hướng dẫn kỹ thuật toàn diện về bfcache của chúng tôi.

Phản hồi

Chúng tôi rất mong nhận được ý kiến phản hồi về thay đổi này. Bạn có thể gửi ý kiến phản hồi trong trình theo dõi lỗi của Chrome bằng cách sử dụng thành phần bfcache.

Kết luận

Chúng tôi rất vui khi có thể mang lại lợi ích của bộ nhớ đệm chuyển tiếp và quay lại cho nhiều trang hơn nữa để cải thiện trải nghiệm người dùng trên trang. Chúng tôi đã cân nhắc kỹ lưỡng về thay đổi này và sẽ cố gắng triển khai theo cách an toàn nhất có thể. Chúng tôi hy vọng thông tin được cung cấp ở đây sẽ giúp nhà phát triển hiểu rõ thay đổi này và thực hiện mọi thay đổi cần thiết để tránh gặp phải vấn đề khi thay đổi này có hiệu lực.