확장 서비스 워커 수명 연장

이제 확장 프로그램 서비스 워커가 이벤트를 수신하는 한 계속 활성 상태를 유지할 수 있습니다. 이렇게 하면 확장 프로그램 서비스 워커의 안정성이 향상되지만 피해야 할 문제가 있습니다.

조 메들리
조 메들리

Chrome 110 (2023년 2월 7일 베타 버전)부터 확장 프로그램 서비스 워커는 이벤트를 수신하는 한 계속 유지됩니다. 이렇게 하면 이전의 확장 프로그램 서비스 워커 구현에서 타이밍 문제가 수정됩니다. 새 이벤트가 이벤트 큐에 있는 경우 시간 초과가 발생하고 시간 초과로 인해 비동기 작업이 잘릴 수 있었습니다. 이 개선으로 확장 프로그램 서비스 워커의 최대 수명이 5분이나 되지 않아도 됩니다.

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

배경

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

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

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

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

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

변경된 내용

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

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

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

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

사진: 파울라 게레이루(Unsplash 제공)