Vòng đời của trình thực thi dịch vụ tiện ích dài hơn

Giờ đây, trình chạy dịch vụ tiện ích có thể vẫn hoạt động miễn là chúng vẫn nhận được sự kiện. Điều này giúp tăng độ tin cậy của nhân viên dịch vụ tiện ích, nhưng có một lỗi mà bạn nên tránh.

Joe Medley
Joe Medley

Kể từ Chrome 110 (phiên bản thử nghiệm beta kể từ ngày 7 tháng 2 năm 2023), nhân viên dịch vụ tiện ích vẫn hoạt động miễn là họ đang nhận được sự kiện. Việc này giúp khắc phục vấn đề về thời gian trong quá trình triển khai trước đây của trình chạy dịch vụ tiện ích. Có thể xảy ra thời gian chờ khi 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ẽ loại bỏ thời gian tồn tại tối đa cố định trong 5 phút của nhân viên dịch vụ tiện ích.

Bài viết này mô tả sự thay đổi của những 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 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ể theo dõi các sự kiện tiện ích. Mặc dù các sự kiện bình thường của trình chạy dịch vụ kéo dài vòng đời của trình chạy dịch vụ, nhưng trước khi phát hành 110, chỉ một vài sự kiện của nền tảng tiện ích duy trì hoạt động của trình chạy dịch vụ tiện ích.

Thông thường, Chromium sẽ chấm dứt một trình chạy dịch vụ sau khi một trong các điều kiện sau được đáp ứng:

  • Trình chạy 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 chạy trong thời gian dài chưa xử lý. Nếu một trình chạy dịch vụ nhận được một sự kiện trong thời gian đó, thì bộ tính giờ ở trạng thái rảnh đã bị xoá.
  • Một nhiệm vụ chạy trong thời gian dài đã mất hơn 5 phút để hoàn thành 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ụ nhận được trước khi bộ tính giờ không hoạt động hoặc bộ tính giờ tác vụ chạy trong thời gian dài hết hạn sẽ đặt lại bộ tính giờ và kéo dài vòng đời 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 của tiện ích. Các sự kiện của tiện ích có thể đánh thức trình chạy dịch vụ tiện ích và duy trì hoạt động cho đến khi sự kiện hoàn tất, nhưng không thể kéo dài đồng hồ hẹn giờ ở trạng thái rảnh 30 giây. Điều này có nghĩa là trình chạy dịch vụ 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ả các sự kiện đều đặt lại đồng hồ hẹn giờ ở trạng thái rảnh và thời gian chờ ở trạng thái 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ó tình trạng gián đoạn ngoài dự kiến, thì nhân viên dịch vụ tiện ích thường sẽ vẫn hoạt động miễn là họ vẫn đ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 cụ thể của tiện ích, chẳng hạn như chrome.storage.local.get(), sẽ đặt lại thời gian chờ ở trạng thái rảnh. Cụ thể:

  • Trình chạy dịch vụ 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ộ tính giờ này).
  • Trình chạy dịch vụ sẽ chấm dứt nếu một yêu cầu đơn lẻ, chẳng hạn như sự kiện hoặc lệnh gọi API, mất hơn 5 phút để xử lý.

Một số API như nhắn tin gốc có khả năng duy trì hoạt động mạnh mẽ, có thể huỷ cả hai bộ tính giờ này.

Chúng tôi vẫn đang nỗ lực để đảm bảo rằng trình chạy dịch vụ tiện ích sẽ bị chấm dứt khi có thể mà không cần phải tắt tác vụ chạy trong thời gian dài. Trình chạy dịch vụ tiện ích tài nguyên phải luôn mang lại lợi nhuận khi có thể. Ngoài ra, các tiện ích cần chuẩn bị cho việc chấm dứt ngoài dự kiến bằng cách duy trì trạng thái. Điều này giúp ngăn chặn các sự kiện ngoài dự đoán như người dùng buộc đóng trình duyệt.

Ảnh của Paula Guerreiro trên Unsplash