Giờ đây, trình chạy dịch vụ tiện ích có thể duy trì hoạt động miễn là chúng đang nhận được sự kiện. Điều này làm tăng độ tin cậy của trình chạy dịch vụ tiện ích, nhưng có một cạm bẫy mà bạn nên tránh.
Kể từ Chrome 110 (ở phiên bản thử nghiệm từ ngày 7 tháng 2 năm 2023), worker dịch vụ tiện ích sẽ luôn hoạt động miễn là chúng đang nhận được sự kiện. Điều này giúp khắc phục vấn đề về thời gian trong quá trình triển khai trước đó của worker dịch vụ tiện ích. Có thể xảy ra thời gian chờ khi các sự kiện mới nằm trong hàng đợi sự kiện và thời gian chờ để cắt bớt công việc không đồng bộ. Điểm cải tiến này sẽ xoá thời gian hoạt động tối đa 5 phút cho worker dịch vụ tiện ích.
Bài viết này mô tả những thay đổi về các hành vi này.
Thông tin khái quát
Trình chạy dịch vụ tiện ích chủ yếu hoạt động giống như trình chạy dịch vụ web, nhưng ngoài sự kiện trình chạy dịch vụ, trình chạy dịch vụ tiện ích cũng có thể nghe các sự kiện tiện ích. Mặc dù các sự kiện của worker dịch vụ thông thường kéo dài thời gian hoạt động của worker dịch vụ, nhưng trước khi phát hành phiên bản 110, chỉ có một vài sự kiện nền tảng tiện ích duy trì hoạt động của worker dịch vụ tiện ích.
Thông thường, Chromium sẽ chấm dứt một worker dịch vụ sau khi đáp ứng một trong các điều kiện sau:
- Worker dịch vụ không nhận được sự kiện nào trong hơn 30 giây và không có tác vụ nào đang chạy trong thời gian dài. Nếu một worker dịch vụ nhận được một sự kiện trong khoảng thời gian đó, thì bộ hẹn giờ ở trạng thái rảnh sẽ bị xoá.
- Một tác vụ chạy trong thời gian dài đã mất hơn 5 phút để hoàn tất và không nhận được sự kiện nào trong 30 giây qua.
Các sự kiện mới của trình chạy dịch vụ được nhận trước khi hết thời gian chờ hoặc hết thời gian thực hiện tác vụ chạy trong thời gian dài sẽ đặt lại các bộ hẹn giờ và kéo dài thời gian hoạt động của trình chạy dịch vụ.
Rất tiếc, hành vi này không áp dụng cho các sự kiện tiện ích. Sự kiện của tiện ích có thể đánh thức một worker dịch vụ tiện ích và duy trì worker đó cho đến khi sự kiện hoàn tất, nhưng không thể kéo dài bộ hẹn giờ ở trạng thái rảnh trong 30 giây. Điều này có nghĩa là các worker dịch vụ của tiện ích có thể bị chấm dứt bất cứ lúc nào sau khi sự kiện tiện ích cuối cùng hoàn tất, ngay cả khi trình duyệt vừa gửi một sự kiện mới đến tiện ích.
Những điểm thay đổi
Kể từ Chrome 110, tất cả sự kiện sẽ đặt lại bộ hẹn giờ khi rảnh và thời gian chờ khi rảnh sẽ không xảy ra nếu có sự kiện đang chờ xử lý. Nói cách khác, giả sử không có sự gián đoạn nào ngoài dự kiến, thì các worker dịch vụ tiện ích hiện thường sẽ vẫn hoạt động miễn là chúng đang tích cực xử lý các sự kiện. Ngoài ra, các lệnh gọi đến các API Chrome dành riêng cho tiện ích, chẳng hạn như chrome.storage.local.get()
, sẽ đặt lại thời gian chờ khi không hoạt động. Cụ thể:
- Trình chạy dịch vụ sẽ chấm dứt sau 30 giây không hoạt động. (Việc nhận một sự kiện hoặc gọi một API tiện ích sẽ đặt lại bộ hẹn giờ này).
- Trình chạy dịch vụ sẽ chấm dứt nếu một yêu cầu (chẳng hạn như một sự kiện hoặc lệnh gọi API) mất nhiều hơn 5 phút để xử lý.
Một số API như tính năng nhắn tin gốc cung cấp tính năng duy trì kết nối mạnh mẽ, giúp huỷ cả hai bộ hẹn giờ này.
Chúng tôi vẫn đang nỗ lực để đảm bảo rằng các worker dịch vụ tiện ích sẽ bị chấm dứt khi có thể mà không làm gián đoạn công việc chạy trong thời gian dài. Worker dịch vụ tiện ích có ý thức về tài nguyên phải luôn nhường quyền khi có thể. Ngoài ra, các tiện ích phải chuẩn bị cho việc chấm dứt không mong muốn bằng cách duy trì trạng thái. Điều này giúp bảo vệ khỏi các sự kiện không lường trước được như người dùng buộc đóng trình duyệt.
Ảnh chụp của Paula Guerreiro trên Unsplash