Ngày xuất bản: 10 tháng 8 năm 2023, Lần cập nhật gần đây nhất: 29 tháng 6 năm 2026
Sự kiện unload sẽ dần bị ngừng sử dụng bằng cách thay đổi dần chế độ mặc định để trình xử lý unload ngừng kích hoạt trên các trang, trừ phi một trang chọn bật lại một cách rõ ràng.
Tiến trình ngừng sử dụng
Chúng tôi lưu ý rằng hành vi huỷ tải có thể sẽ thay đổi sớm nhất là vào tháng 1 năm 2019, khi chúng tôi thông báo ý định triển khai bộ nhớ đệm cho thao tác tiến/lùi. Song song với công việc triển khai, chúng tôi đã thực hiện một chiến dịch tiếp cận quy mô lớn, giúp giảm đáng kể mức sử dụng tính năng huỷ tải. Để bổ sung cho chiến dịch tiếp cận này, chúng tôi cũng bắt đầu cung cấp các cách để kiểm thử hiệu quả của việc ngừng sử dụng tính năng huỷ tải kể từ Chrome 115:
- Kiểm thử trong thực tế bằng cách sử dụng Permission-Policy API cho tính năng huỷ tải trong Chrome 115 (tháng 7 năm 2023)
- Kiểm thử cục bộ bằng cách bật một cờ trong Chrome 117 (tháng 9 năm 2023)
Trong suốt năm 2024, chúng tôi đã giải quyết một số vấn đề cản trở việc bắt đầu triển khai và trong suốt năm 2025, chúng tôi đã triển khai việc ngừng sử dụng cho 50 trang web hàng đầu:
| Milestone | Ngày của mốc quan trọng | 50 trang web hàng đầu | % nguồn gốc khác |
|---|---|---|---|
| 135 | Ngày 26 tháng 3 năm 2025 | 1 (www.google.com) |
0 |
| 139 | Ngày 30 tháng 7 năm 2025 | 5 | 0 |
| 140 | Ngày 27 tháng 8 năm 2025 | 10 | 0 |
| 141 | Ngày 24 tháng 9 năm 2025 | 25 | 0 |
| 142 | Ngày 22 tháng 10 năm 2025 | 50 | 0 |
Vào năm 2026, chúng tôi bắt đầu triển khai việc này cho tất cả nguồn gốc, qua 8 mốc quan trọng (hoặc khoảng 32 tuần), như trình bày chi tiết trong bảng sau.
| Milestone | Ngày của mốc quan trọng | 50 trang web hàng đầu | % số lượt tải trang Chrome cho tất cả trang web |
|---|---|---|---|
| 146 | Ngày 10 tháng 3 năm 2026 | 50 | 1 |
| 147 | Ngày 7 tháng 4 năm 2026 | 50 | 5 |
| 148 | Ngày 5 tháng 5 năm 2026 | 50 | 10 |
| 149 | Ngày 2 tháng 6 năm 2026 | 50 | 20 |
| 150 | Ngày 30 tháng 6 năm 2026 | 50 | 40 |
| 151 | Ngày 28 tháng 7 năm 2026 | 50 | 60 |
| 152 | Ngày 25 tháng 8 năm 2026 | 50 | 80 |
| 153 | Ngày 22 tháng 9 năm 2026 | 50 | 100 |
Việc triển khai đầy đủ dựa trên số lượt tải trang (với tính nhất quán theo thời gian), thay vì từng người dùng hoặc trang web để tránh ảnh hưởng đến người dùng hoặc trang web nhiều hơn những người dùng hoặc trang web khác như trình bày chi tiết trong Ý định ngừng sử dụng.
Xin lưu ý rằng chúng tôi cũng cung cấp một trình đơn gồm các lựa chọn không tham gia trong trường hợp tiến trình ngừng sử dụng này không cung cấp đủ thời gian để di chuyển khỏi tính năng huỷ tải.
Thông tin khái quát
unload được thiết kế để kích hoạt khi tài liệu đang được huỷ tải. Về lý thuyết, bạn có thể dùng sự kiện này để chạy mã bất cứ khi nào người dùng di chuyển khỏi một trang hoặc làm lệnh gọi lại khi kết thúc phiên.
Các trường hợp thường dùng sự kiện này nhất bao gồm:
- Lưu dữ liệu người dùng: Lưu dữ liệu trước khi rời khỏi trang.
- Thực hiện các tác vụ dọn dẹp: Đóng các tài nguyên đang mở trước khi rời khỏi trang.
- Gửi dữ liệu phân tích: Gửi dữ liệu liên quan đến lượt tương tác của người dùng khi kết thúc phiên.
Tuy nhiên, sự kiện unload cực kỳ không đáng tin cậy.
Trên Chrome và Firefox dành cho máy tính, unload khá đáng tin cậy nhưng lại ảnh hưởng tiêu cực đến hiệu suất của trang web bằng cách ngăn việc sử dụng bfcache (bộ nhớ đệm cho thao tác tiến/lùi).
Trên trình duyệt dành cho thiết bị di động, unload thường không chạy vì các thẻ thường được chuyển sang chế độ nền rồi bị đóng. Vì lý do này, trình duyệt chọn ưu tiên bfcache trên thiết bị di động hơn unload, khiến chúng càng không đáng tin cậy hơn. Safari cũng sử dụng hành vi này trên máy tính.
Nhóm Chrome tin rằng việc sử dụng mô hình ưu tiên bfcache trên unload dành cho thiết bị di động trên máy tính sẽ gây gián đoạn bằng cách khiến mô hình này trở nên không đáng tin cậy hơn, trong khi trước đây mô hình này khá đáng tin cậy trong Chrome (và Firefox). Thay vào đó, mục tiêu của Chrome là loại bỏ hoàn toàn sự kiện unload. Cho đến lúc đó, sự kiện này sẽ vẫn đáng tin cậy trên Chrome dành cho máy tính đối với những người đã chọn không tham gia việc ngừng sử dụng.
Tại sao nên ngừng sử dụng sự kiện unload?
Việc ngừng sử dụng unload là một bước quan trọng trong việc nhận diện rõ hơn về web mà chúng ta đang sử dụng. Sự kiện unload mang lại cảm giác kiểm soát sai lệch về vòng đời của ứng dụng, điều này ngày càng không đúng với cách chúng ta duyệt web trong thế giới máy tính hiện đại.
Hệ điều hành di động thường xuyên đóng băng hoặc huỷ tải các trang web để tiết kiệm bộ nhớ và trình duyệt dành cho máy tính cũng đang làm điều này ngày càng nhiều hơn vì những lý do tương tự. Ngay cả khi không có sự can thiệp của hệ điều hành, bản thân người dùng cũng thường xuyên chuyển đổi thẻ và đóng các thẻ cũ mà không chính thức "rời khỏi trang".
Việc loại bỏ sự kiện unload vì sự kiện này đã lỗi thời là sự thừa nhận rằng chúng ta với tư cách là nhà phát triển web cần đảm bảo mô hình của mình phù hợp với thế giới thực và không phụ thuộc vào các khái niệm lỗi thời không còn đúng nữa – nếu chúng từng đúng.
Các lựa chọn thay thế cho sự kiện unload
Thay vì unload, bạn nên sử dụng:
visibilitychange: Để xác định thời điểm thay đổi khả năng hiển thị của một trang. Sự kiện này xảy ra khi người dùng chuyển đổi thẻ, thu nhỏ cửa sổ trình duyệt hoặc mở một trang mới. Hãy cân nhắc trạng tháihiddenlà thời điểm đáng tin cậy cuối cùng để lưu dữ liệu ứng dụng và người dùng.pagehide: Để xác định thời điểm người dùng di chuyển khỏi trang. Sự kiện này xảy ra khi người dùng di chuyển khỏi trang, tải lại trang hoặc đóng cửa sổ trình duyệt. Sự kiệnpagehidekhông kích hoạt khi trang được thu nhỏ hoặc chuyển sang một thẻ khác. Xin lưu ý rằng vìpagehidekhông khiến một trang không đủ điều kiện cho bộ nhớ đệm cho thao tác tiến/lùi, nên có thể khôi phục một trang sau khi sự kiện này kích hoạt. Nếu bạn đang dọn dẹp bất kỳ tài nguyên nào trong sự kiện này, thì có thể bạn phải khôi phục các tài nguyên đó khi khôi phục trang.
Sự kiện beforeunload có trường hợp sử dụng hơi khác so với unload ở chỗ đây là sự kiện có thể huỷ. Sự kiện này thường được dùng để cảnh báo người dùng về những thay đổi chưa được lưu khi di chuyển khỏi trang. Sự kiện này cũng không đáng tin cậy vì sẽ không kích hoạt nếu một thẻ ở chế độ nền bị đóng. Bạn nên hạn chế sử dụng beforeunload và chỉ thêm sự kiện này một cách có điều kiện. Thay vào đó, hãy sử dụng các sự kiện đã đề cập trước đó để thay thế hầu hết unload.
Để biết thêm thông tin chi tiết, hãy xem lời khuyên này về việc không bao giờ sử dụng trình xử lý unload.
Phát hiện việc sử dụng unload
Có nhiều công cụ giúp bạn tìm thấy sự kiện unload trên các trang. Điều này cho phép các trang web phát hiện xem họ có đang sử dụng sự kiện này hay không – trong mã của riêng họ hoặc sử dụng thư viện – và do đó có thể bị ảnh hưởng bởi việc ngừng sử dụng sắp tới.
Chrome DevTools
Chrome DevTools bao gồm một quy trình back-forward-cache kiểm tra để giúp bạn xác định các vấn đề có thể khiến trang của bạn không đủ điều kiện cho bộ nhớ đệm cho thao tác tiến/lùi, bao gồm cả việc sử dụng trình xử lý unload.
Để kiểm thử bộ nhớ đệm cho thao tác tiến/lùi, hãy làm theo các bước sau:
Trên trang của bạn, hãy mở DevTools, sau đó chuyển đến Application > Background services > Back/forward cache (Ứng dụng > Dịch vụ trong nền > Bộ nhớ đệm cho thao tác tiến/lùi).
Nhấp vào Test back/forward cache (Kiểm thử bộ nhớ đệm cho thao tác tiến/lùi). Chrome sẽ tự động đưa bạn đến
chrome://terms/rồi quay lại trang của bạn. Ngoài ra, bạn có thể nhấp vào nút quay lại và tiến của trình duyệt.
Nếu trang của bạn không đủ điều kiện để lưu vào bộ nhớ đệm cho thao tác tiến/lùi, thì thẻ Back/forward cache (Bộ nhớ đệm cho thao tác tiến/lùi) sẽ cho bạn thấy danh sách các vấn đề. Trong phần Actionable (Có thể thực hiện), bạn có thể xem liệu mình có đang sử dụng unload hay không:
API báo cáo
Bạn có thể sử dụng Reporting API (API báo cáo) cùng với Permission Policy (Chính sách về quyền) chỉ có thể đọc để phát hiện việc sử dụng unload của người dùng trang web.
Để biết thêm thông tin chi tiết, hãy xem bài viết Sử dụng Reporting API (API báo cáo) để tìm các lượt huỷ tải
API notRestoredReasons của Bfcache
Thuộc tính notRestoredReasons (được thêm vào lớp PerformanceNavigationTiming) báo cáo thông tin về việc liệu các tài liệu có bị chặn sử dụng bfcache trên thao tác di chuyển hay không và lý do. Đây là ví dụ về cách đối tượng phản hồi cảnh báo về trình nghe unload hiện có:
{
children: [],
id: null,
name: null,
reasons: [
{"reason", "unload-listener"}
],
src: null,
url: "https://www.example.com/page/"
}
Kiểm soát quyền truy cập vào unload
Chrome đang dần ngừng sử dụng sự kiện unload. Trong thời gian chờ đợi, bạn có thể sử dụng nhiều công cụ để kiểm soát hành vi này và chuẩn bị cho việc ngừng sử dụng sắp tới. Xin lưu ý rằng bạn không nên dựa vào các kỹ thuật này trong dài hạn và bạn nên lên kế hoạch di chuyển sang các lựa chọn thay thế càng sớm càng tốt.
Các lựa chọn sau đây cho phép bạn bật hoặc tắt trình xử lý unload để kiểm thử cách trang web của bạn hoạt động mà không có các trình xử lý này, nhờ đó bạn có thể chuẩn bị cho việc ngừng sử dụng sắp tới. Có nhiều loại chính sách:
- Chính sách về quyền: Đây là một API nền tảng dành cho chủ sở hữu trang web để kiểm soát quyền truy cập vào các tính năng, ở cấp trang web hoặc trang riêng lẻ, bằng cách sử dụng tiêu đề HTTP.
- Chính sách doanh nghiệp: Các công cụ dành cho quản trị viên CNTT để định cấu hình Chrome cho tổ chức hoặc doanh nghiệp của họ. Bạn có thể định cấu hình các công cụ này bằng bảng điều khiển dành cho quản trị viên, chẳng hạn như Bảng điều khiển dành cho quản trị viên của Google.
- Cờ Chrome: Điều này cho phép nhà phát triển riêng lẻ thay đổi chế độ cài đặt ngừng sử dụng
unloadđể kiểm thử tác động trên nhiều trang web.
Chính sách về quyền
Một Chính sách về quyền đã được thêm vào từ Chrome 115 để cho phép các trang web chọn không sử dụng trình xử lý unload và hưởng lợi ngay lập tức từ bfcache để cải thiện hiệu suất của trang web. Hãy xem các ví dụ này về cách thiết lập chính sách này cho trang web của bạn. Điều này cho phép các trang web đi trước việc ngừng sử dụng unload.
Chính sách này đã được mở rộng trong Chrome 117 để cho phép các trang web làm ngược lại và chọn tiếp tục cố gắng kích hoạt unload trình xử lý như hiện tại, vì Chrome sẽ thay đổi chế độ mặc định cho các trình xử lý này để không kích hoạt trong tương lai. Hãy xem các ví dụ này về cách tiếp tục cho phép trình xử lý huỷ tải kích hoạt cho trang web của bạn. Mặc dù chúng tôi khuyến khích chủ sở hữu trang web ngừng sử dụng trình xử lý unload do tính không đáng tin cậy của chúng, nhưng chúng tôi dự định hỗ trợ lựa chọn không tham gia này trong tương lai gần cho các trang web cần sử dụng. Xin lưu ý rằng việc chọn tham gia lại không làm cho trình xử lý unload đáng tin cậy hơn trên thiết bị di động – mà chỉ khôi phục trạng thái hiện tại.
Chính sách doanh nghiệp
Các doanh nghiệp có phần mềm phụ thuộc vào sự kiện unload để hoạt động chính xác có thể sử dụng chính sách ForcePermissionPolicyUnloadDefaultEnabled để ngăn việc ngừng sử dụng dần cho các thiết bị thuộc quyền kiểm soát của họ. Bằng cách bật chính sách này, unload sẽ tiếp tục được bật theo mặc định cho tất cả nguồn gốc. Một trang vẫn có thể đặt chính sách nghiêm ngặt hơn nếu muốn. Giống như lựa chọn không tham gia Chính sách về quyền, đây là một công cụ để giảm thiểu các thay đổi có thể gây lỗi. Một lần nữa, chúng tôi khuyến khích chủ sở hữu trang web ngừng phụ thuộc vào trình xử lý unload, nhưng Chrome dự định hỗ trợ lựa chọn không tham gia dành cho doanh nghiệp này trong tương lai gần cho các trang web cần sử dụng.
Cờ Chrome và nút chuyển dòng lệnh
Cũng như chính sách doanh nghiệp, bạn có thể tắt việc ngừng sử dụng cho từng người dùng bằng cách sử dụng cờ Chrome và nút chuyển dòng lệnh:
Việc đặt chrome://flags/#deprecate-unload thành enabled sẽ đưa chế độ mặc định ngừng sử dụng lên trước và ngăn trình xử lý unload kích hoạt. Bạn vẫn có thể ghi đè các trình xử lý này trên cơ sở từng trang web bằng cách sử dụng Chính sách về quyền, nhưng các trình xử lý này sẽ tiếp tục kích hoạt theo mặc định.
Bạn cũng có thể kiểm soát các chế độ cài đặt này bằng nút chuyển dòng lệnh.
So sánh các lựa chọn
Bảng sau đây tóm tắt các cách sử dụng khác nhau của các lựa chọn đã thảo luận trước đó:
| Đưa việc ngừng sử dụng lên trước | Đưa việc ngừng sử dụng lên trước (có ngoại lệ) | Ngăn việc ngừng sử dụng để đảm bảo thời gian di chuyển | |
|---|---|---|---|
| Chính sách về quyền (áp dụng cho các trang/trang web) |
Có | Có | Có |
| Chính sách doanh nghiệp (áp dụng cho thiết bị) |
Không | Không | Có |
| Cờ Chrome (áp dụng cho từng người dùng) |
Có | Không | Không |
| Nút chuyển dòng lệnh của Chrome (áp dụng cho từng người dùng) |
Có | Không | Có |
Kết luận
Trình xử lý unload đang bị ngừng sử dụng. Các trình xử lý này đã không đáng tin cậy trong một thời gian dài và không đảm bảo sẽ kích hoạt trong tất cả các trường hợp tài liệu bị huỷ. Ngoài ra, trình xử lý unload không tương thích với bfcache.
Các trang web sử dụng trình xử lý unload nên chuẩn bị cho việc ngừng sử dụng sắp tới bằng cách kiểm thử mọi trình xử lý unload hiện có, xoá hoặc di chuyển các trình xử lý đó hoặc, phương án cuối cùng là trì hoãn việc ngừng sử dụng nếu cần thêm thời gian.
Lời cảm ơn
Cảm ơn Kenji Baheux, Fergal Daly, Adriana Jara và Jeremy Wagner đã đưa ra ý kiến phản hồi hữu ích trong quá trình xem xét.
Hình ảnh chính của Anja Bauermann trên Unsplash