확장 서비스 워커 수명 연장

이제 확장 프로그램 서비스 워커가 이벤트를 수신하는 한 활성 상태를 유지할 수 있습니다. 이는 확장 프로그램 서비스 작업자의 신뢰성을 높이지만, 피해야 할 문제가 있습니다.

Joe Medley
Joe Medley

Chrome 110 (2023년 2월 7일 베타 버전)부터 확장 프로그램 서비스 워커는 이벤트를 수신하는 한 계속 유지됩니다. 따라서 이전에 구현된 확장 서비스 워커의 타이밍 문제가 수정됩니다. 새 이벤트가 이벤트 대기열에 있을 때 시간 초과가 발생하고 시간 초과로 인해 비동기 작업이 잘릴 수 있었습니다. 이 개선사항을 통해 확장 서비스 워커의 엄격한 최대 전체 기간인 5분이 삭제됩니다.

이 도움말에서는 이러한 동작이 어떻게 변경되었는지 설명합니다.

배경

확장 프로그램 서비스 워커는 대부분 웹 서비스 워커처럼 작동하지만, 서비스 워커 이벤트 외에도 확장 프로그램 서비스 워커는 확장 프로그램 이벤트를 수신 대기할 수 있습니다. 일반적인 서비스 워커 이벤트는 서비스 워커의 전체 기간을 연장하지만, 110이 출시되기 전에는 몇 가지 확장 플랫폼 이벤트만이 확장 프로그램 서비스 워커를 활성화했습니다.

일반적으로 Chromium은 다음 조건 중 하나가 충족되면 서비스 워커를 종료합니다.

  • 서비스 워커가 30초 이상 이벤트를 수신하지 않았으며 진행 중인 미해결 장기 실행 작업이 없습니다. 해당 시간 동안 서비스 워커가 이벤트를 수신하면 유휴 타이머가 제거되었습니다.
  • 장기 실행 작업을 완료하는 데 5분 넘게 걸렸으며 지난 30초 동안 수신된 이벤트가 없습니다.

유휴 타이머 또는 장기 실행 작업 타이머가 만료되기 전에 수신된 새 서비스 워커 이벤트는 타이머를 재설정하고 서비스 워커의 수명을 연장합니다.

안타깝게도 이 동작은 확장 프로그램 이벤트에 적용되지 않았습니다. 확장 이벤트는 확장 프로그램 서비스 워커의 절전 모드를 해제하고 이벤트가 완료될 때까지 이를 유지할 수 있지만 30초 유휴 타이머를 연장할 수는 없습니다. 이는 사실상 브라우저가 확장 프로그램에 새 이벤트를 전달했더라도 마지막 확장 프로그램 이벤트가 완료된 후 언제든지 확장 프로그램 서비스 워커가 종료될 수 있음을 의미합니다.

변경된 내용

Chrome 110부터 모든 이벤트가 유휴 타이머를 재설정하며 대기 중인 이벤트가 있는 경우 유휴 시간 제한이 발생하지 않습니다. 즉, 예기치 않은 중단이 없다고 가정하면 확장 프로그램 서비스 워커는 일반적으로 이벤트를 적극적으로 처리하는 한 활성 상태로 유지됩니다. 또한 확장 프로그램 특정 Chrome API(예: chrome.storage.local.get())를 호출하면 유휴 시간 제한이 재설정됩니다. 특히 다음에 주의해야 합니다.

  • 서비스 워커는 비활성 상태가 30초 후에 종료됩니다. 이벤트를 수신하거나 확장 프로그램 API를 호출하면 이 타이머가 재설정됩니다.
  • 이벤트 또는 API 호출과 같은 단일 요청을 처리하는 데 5분 넘게 걸리면 서비스 워커가 종료됩니다.

네이티브 메시지와 같은 일부 API는 이러한 두 타이머를 모두 취소하는 강력한 연결 유지 기능을 제공합니다.

Google은 가능한 경우 장기 실행 작업을 종료하지 않고 확장 프로그램 서비스 워커가 종료되도록 계속 노력하고 있습니다. 리소스를 중시하는 확장 프로그램 서비스 워커는 가능한 경우 항상 양보해야 합니다. 또한 확장 프로그램은 상태를 유지하여 예기치 않은 종료에 대비해야 합니다. 이렇게 하면 사용자가 브라우저를 강제로 닫는 등 예측할 수 없는 이벤트로부터 보호할 수 있습니다.

사진: Paula Guerreiro, Unsplash