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

Trình chạy dịch vụ tiện ích hiện có thể duy trì hoạt động miễn là họ đang nhận sự kiện. Điều này giúp tăng độ tin cậy của trình chạy dịch vụ tiện ích, nhưng có một sai lầm bạn nên tránh.

Liên khúc Joe
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), các trình chạy dịch vụ tiện ích vẫn duy trì hoạt động cho đến khi 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ình chạy dịch vụ tiện ích trước đó. Thời gian chờ có thể xảy ra khi các sự kiện mới nằm trong hàng đợi sự kiện và khi hết thời gian chờ sẽ cắt bớt công việc không đồng bộ. Điểm cải tiến này giúp trình thực thi dịch vụ tiện ích loại bỏ thời gian chờ tối đa trong 5 phút.

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 các sự kiện của 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 của tiện ích. Mặc dù các sự kiện thông thường của trình chạy dịch vụ kéo dài thời gian hoạt động của trình chạy dịch vụ này, nhưng trước khi phát hành 110, chỉ có một vài sự kiện trên nền tảng tiện ích giúp giữ cho một trình chạy dịch vụ tiện ích tiếp tục hoạt động.

Thông thường, Chromium sẽ chấm dứ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ụ chưa nhận được sự kiện nào trong hơn 30 giây và không có tác vụ chạy trong thời gian dài nào đang diễn ra. 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 sẽ bị xoá.
  • Một nhiệm vụ dài hạn mất hơn năm phút để hoàn thành và bạn chưa nhận được sự kiện nào trong 30 giây vừa qua.

Các sự kiện trình chạy dịch vụ mới 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 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 của tiện ích. Các sự kiện tiện ích có thể đánh thức một trình chạy dịch vụ tiện ích và duy trì hoạt động cho đến khi sự kiện kết thúc, nhưng không thể kéo dài bộ tính giờ 30 giây không hoạt động. Đ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ả sự kiện sẽ đặt lại bộ tính giờ không hoạt động và thời gian chờ ở trạng thái rảnh sẽ không xảy ra nếu có các sự kiện đang chờ xử lý. Nói cách khác, giả sử không có sự cố gián đoạn ngoài dự kiến nào, thì giờ đây trình chạy dịch vụ mở rộng thường sẽ duy trì hoạt động miễn là họ vẫn tích cực xử lý 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ờ ở trạng thái rảnh. Cụ thể:

  • Trình chạy dịch vụ này 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ụ 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 hơn 5 phút để xử lý.

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

Chúng tôi vẫn đang nỗ lực để đảm bảo rằng nhân viên dịch vụ tiện ích bị chấm dứt khi có thể mà không cần dừng công việc chạy trong thời gian dài. Trình chạy dịch vụ mở rộng có 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 không mong muốn bằng cách duy trì trạng thái. Điều này giúp tránh các sự kiện bất ngờ như trình duyệt bị người dùng buộc đóng.

Ảnh của Paula Guerreiro trên Unsplash