Ngày xuất bản: 10 tháng 8 năm 2023, Ngày cập nhật gần đây nhất: 28 tháng 4 năm 2026
Sự kiện unload sẽ dần bị loại bỏ bằng cách thay đổi dần giá trị mặc định để các 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 các trình xử lý này.
Tiến trình loại bỏ
Chúng tôi nhận thấy 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 công bố ý đị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, dẫn đến việc sử dụng tính năng huỷ tải giảm đáng kể. Để 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 tra hiệu quả của việc ngừng sử dụng unload khỏi Chrome 115:
- Kiểm thử trong thực tế bằng API Chính sách về quyền đối với 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 loại bỏ 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 | 26 tháng 3 năm 2025 | 1 (www.google.com) |
0 |
| 139 | 30 tháng 7 năm 2025 | 5 | 0 |
| 140 | 27 tháng 8 năm 2025 | 10 | 0 |
| 141 | 24 tháng 9 năm 2025 | 25 | 0 |
| 142 | 22 tháng 10 năm 2025 | 50 | 0 |
Sau khi hoàn tất việc loại bỏ cho 50 trang web hàng đầu, chúng tôi đã được phê duyệt thêm để triển khai việc này cho tất cả cá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ả các trang web |
|---|---|---|---|
| 146 | 10 tháng 3 năm 2026 | 50 | 1 |
| 147 | 7 tháng 4 năm 2026 | 50 | 5 |
| 148 | 5 tháng 5 năm 2026 | 50 | 10 |
| 149 | 2 tháng 6 năm 2026 | 50 | 20 |
| 150 | 30 tháng 6 năm 2026 | 50 | 40 |
| 151 | 28 tháng 7 năm 2026 | 50 | 60 |
| 152 | 25 tháng 8 năm 2026 | 50 | 80 |
| 153 | 22 tháng 9 năm 2026 | 50 | 100 |
Việc phát hành đầ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ì người dùng hoặc trang web riêng lẻ để tránh tác độ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 loại bỏ.
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 loại bỏ này không cung cấp đủ thời gian để di chuyển khỏi tính năng huỷ tải. Mục tiêu của chúng tôi là sử dụng việc loại bỏ nhẹ này để thông báo về tiến trình cho giai đoạn cuối cùng (loại bỏ hoàn toàn tính năng huỷ tải) trong đó các lựa chọn không tham gia này sẽ bị xoá hoặc giảm.
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ể sử 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 sự kiện này được sử dụng phổ biến 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 có tác động tiêu cực đến hiệu suất của trang web bằng cách ngăn chặ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 trở nên 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 vẫn sẽ đáng tin cậy trên máy tính đối với những người đã chọn không tham gia việc loại bỏ.
Tại sao nên loại bỏ sự kiện unload?
Việc loại bỏ unload là một bước quan trọng trong việc nhận ra rằng chúng ta đang sống trong một thế giới web rộng lớn hơn nhiều. Sự kiện unload tạo cảm giác sai lầm về việc kiểm soát vòng đời ứ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ì cùng một lý do. 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à một 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 được 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ó một trường hợp sử dụng hơi khác so với unload ở chỗ đây là một 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 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ẻ 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 khám phá 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 loại bỏ sắp tới.
Chrome DevTools
Chrome DevTools bao gồm một back-forward-cache quy trình kiểm tra để giúp bạn xác định các vấn đề có thể ngăn trang của bạn đủ đ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 tra 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ở Công cụ cho nhà phát triển, sau đó chuyển đến Ứng dụng > Dịch vụ nền > Bộ nhớ đệm cho thao tác tiến/lùi.
Nhấp vào Kiểm tra bộ nhớ đệm cho thao tác tiến/lùi Chrome sẽ tự động đưa bạn đến
chrome://terms/và 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 cho việc lưu vào bộ nhớ đệm cho thao tác tiến/lùi, thì thẻ Bộ nhớ đệm cho thao tác tiến/lùi sẽ hiển thị danh sách các vấn đề. Trong phần 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 API báo cáo cùng với Chính sách về quyền chỉ đọc để phát hiện việc sử dụng unload từ người dùng trang web của bạn.
Để biết thêm thông tin chi tiết, hãy xem bài viết Sử dụng API báo cáo để tìm các lượt huỷ tải
API notRestoredReasons 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 cảnh báo đối tượng phản hồi 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 sẽ dần loại bỏ 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 loại bỏ 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à 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 tra 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 không dùng nữa 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 chính sách 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 một nhà phát triển riêng lẻ thay đổi chế độ cài đặt loại bỏ
unloadđể kiểm tra tác động trên nhiều trang web.
Chính sách về quyền
Chính sách về quyền đã được thêm vào Chrome 115 để cho phép các trang web chọn không tham gia sử dụng trình xử lý unload và hưởng lợi ngay lập tức từ bộ nhớ đệm cho thao tác tiến/lùi để 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 loại bỏ unload.
Tính năng này đã được mở rộng trong Chrome 117 để cho phép các trang web thực hiện thao tác ngược lại và chọn tiếp tục cố gắng kích hoạt trình xử lý unload như hiện tại, vì Chrome thay đổi giá trị 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 chuyển sang không sử dụng trình xử lý unload do tính không đáng tin cậy của các trình xử lý này, nhưng chúng tôi dự định sẽ hỗ trợ lựa chọn không tham gia này trong tương lai gần cho những trang web cần sử dụng. Ngoài ra, 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 chặn việc loại bỏ 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ả cá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 sẽ hỗ trợ lựa chọn không tham gia doanh nghiệp này trong tương lai gần cho những 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 tính năng loại bỏ 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 giá trị mặc định không dùng nữa 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 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 loại bỏ lên trước | Đưa việc loại bỏ lên trước (có ngoại lệ) | Ngăn chặn việc loại bỏ để đả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 Chrome (áp dụng cho từng người dùng) |
Có | Không | Có |
Kết luận
Các trình xử lý unload đang bị loại bỏ. 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ẽ được 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 hoạt động sắp tới bằng cách kiểm tra 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 hoạt động nếu cần thêm thời gian.
Lời cảm ơn
Xin cảm ơn Kenji Baheux, Fergal Daly, Adriana Jara và Jeremy Wagner đã giúp xem xét bài viết này.
Hình ảnh chính của Anja Bauermann trên Unsplash