웹 주기적 백그라운드 동기화

커뮤니티 그룹 초안 보고서,

이 버전:
https://wicg.github.io/periodic-background-sync/index.html
이슈 추적:
GitHub
편집자:
(Google)
(Google)

요약

이 명세서는 웹 애플리케이션이 백그라운드에서 주기적으로 데이터 및 콘텐츠를 동기화할 수 있도록 하는 방법을 설명합니다.

이 문서의 상태

이 명세서는 웹 플랫폼 인큐베이터 커뮤니티 그룹에서 발행한 것입니다. 이 문서는 W3C 표준이 아니며 W3C 표준 트랙에 포함되어 있지 않습니다. W3C Community Contributor License Agreement (CLA)에 따라 제한된 옵트아웃이 있으며 기타 조건이 적용된다는 점에 유의하세요. W3C 커뮤니티 및 비즈니스 그룹에 대해 자세히 알아보세요.

1. 소개

이 섹션은 비규범적입니다.

웹 애플리케이션은 종종 신뢰할 수 없는 네트워크(예: 휴대전화)와 불확실한 수명(브라우저가 종료되거나 사용자가 다른 곳으로 이동할 수 있음) 환경에서 실행됩니다. 이로 인해 웹 앱이 서버와 콘텐츠 및 상태를 동기화 상태로 유지하기가 어려워집니다.

이 API는 서버와 웹 앱 간의 콘텐츠 생성과 콘텐츠 동기화 사이의 시간을 줄이기 위해 설계되었습니다. 웹 앱이 주기적으로 상태와 데이터를 동기화하려는 의도를 원하는 최소 간격과 함께 등록할 수 있도록 함으로써 이를 실현합니다. 서비스 워커 이벤트를 통해 사용자 에이전트는 주기적으로 웹 앱이 네트워크 리소스를 다운로드하고 상태를 업데이트하도록 허용합니다.

이 API는 서비스 워커에 의존하므로, 이 API가 제공하는 기능은 보안 컨텍스트에서만 사용할 수 있습니다.

1.1. 예제

브라우징 컨텍스트(browsing context)에서 최소 간격을 하루로 하여 주기적 백그라운드 동기화를 등록하는 예:
async function registerPeriodicNewsCheck() {
  const registration = await navigator.serviceWorker.ready;
  try {
    await registration.periodicSync.register('fetch-news', {
      minInterval: 24 * 60 * 60 * 1000,
    });
  } catch {
    console.log('Periodic Sync could not be registered!');
  }
}

서비스 워커(service worker) 내에서 periodicsync 이벤트에 반응하는 예:

self.addEventListener('periodicsync', event => {
  event.waitUntil(fetchAndCacheLatestNews());
});

위 예제에서 fetchAndCacheLatestNews는 개발자가 정의한 함수로, 서버에서 최신 뉴스 기사를 가져와 로컬에 저장합니다. 예를 들어 오프라인 사용을 위해 Cache API를 사용할 수 있습니다.

2. 개념

주기적 동기화 등록에 대해 periodicsync 이벤트가 발생할 때, 해당 registration과 연관된 서비스 워커 등록origin에 대해 프레임 유형(frame type)이 "top-level", "auxiliary" 또는 "nested"인 서비스 워커 클라이언트가 존재하지 않으면, 그 이벤트는 백그라운드에서 실행되는 것으로 간주됩니다.

3. 서비스 워커 등록에 대한 확장

서비스 워커 등록(service worker registration)은 추가로 다음을 가집니다:

4. 구성

4.1. 주기적 동기화 등록

주기적 동기화 등록(periodic sync registration)은 다음으로 구성됩니다:

서비스 워커 등록, 이는 service worker registration입니다.

태그, 이는 DOMString입니다.

참고: Periodic Background Sync는 Background Sync와 네임스페이스를 공유하지 않으므로, 동일한 origin은 동일한 태그로 두 유형의 등록을 모두 가질 수 있습니다.

최소 간격 (long long), 주기적 동기화가 발생해야 하는 최소 간격(밀리초)을 지정하는 데 사용됩니다. minimum interval은 사용자 에이전트에 대한 제안입니다.

참고: 실제로 periodicsync 이벤트가 발생하는 간격은 반드시 이 값보다 크거나 같아야 합니다.

주기적 동기화 등록의 기준 시점(anchor time) (타임스탬프)은 이 periodicsync 이벤트가 이 주기적 동기화 등록에 대해 이전에 발생한 시점이거나 초기 등록 시점입니다.

주기적 동기화 등록의 상태는 "pending", "firing", "suspended" 또는 "reregistered-while-firing" 중 하나이며, 초기값은 "pending"입니다.

4.2. 주기적 동기화 스케줄러

주기적 동기화 스케줄러(periodic sync scheduler)는 periodicsync 이벤트의 발생을 예약하는 역할을 합니다. 트리거에 응답하여 스케줄러는 적절한 미래 시점에 periodicsync 이벤트를 발생시키기 위해 지연된 처리를 예약하거나, 그러한 예약을 취소합니다.

스케줄러는 다음을 유지합니다:

원본(origin)에 대한 유효 최소 동기화 간격 origin (an origin)은 모든 origin에 대한 최소 주기적 동기화 간격에 사용자 에이전트가 정의한 원본별 추가 값을 더한 값입니다.

참고: 사용자 에이전트가 정의한 추가 값은 사용자가 해당 origin과 갖는 참여도(engagement)에 따라 달라질 수 있습니다. 이 값은 원본에 대한 유효 최소 동기화 간격이 호출될 때마다 달라질 수 있습니다.

스케줄러는 주기적 동기화 등록을 처리합니다.

참고: 브라우저는 리소스를 절약하기 위해 활성 주기적 동기화 등록이 없을 때 이 처리 루프를 일시 중단할 수 있습니다.

4.3. 상수

섹션 § 5 개인정보 보호 고려사항§ 6 자원 사용에서 권장한 바와 같이, 사용자 에이전트는 다음을 정의해야 합니다:

origin 간 최소 주기적 동기화 간격모든 origin에 대한 최소 주기적 동기화 간격보다 크거나 같아야 합니다. 정의되지 않은 경우, 이 값들은 43200000(밀리초 단위의 12시간)으로 설정됩니다.

참고: 빈도에 대한 두 가지 제한이 필요한 이유는, 각 origin에 대해 모든 origin에 대한 최소 주기적 동기화 간격 제한을 준수하더라도 브라우저가 매우 자주 periodicsync 이벤트를 발생시킬 수 있기 때문입니다. 예를 들어 서로 다른 여러 origin에 많은 주기적 동기화 등록이 있는 경우에 발생할 수 있습니다. origin 간 최소 주기적 동기화 간격은 이러한 이벤트가 발생하는 전역적 상한을 보장합니다.

사용자 에이전트는 각 periodicsync 이벤트에 대해 허용되는 최대 재시도 횟수(숫자)를 정의할 수 있습니다. 이 값을 선택할 때, 사용자 에이전트는 최대 재시도 횟수를 시도하는 데 필요한 시간이 모든 origin에 대한 최소 주기적 동기화 간격보다 한 자릿수 작도록 보장해야 합니다. 정의되지 않은 경우, 이 값은 0입니다.

5. 개인정보 보호 고려사항

5.1. 권한

Periodic Background Sync는 PermissionStatePermissionDescriptor 에 대해 name"periodic-background-sync" 인 경우에만 사용할 수 있으며 해당 PermissionState가 granted 여야 합니다. 또한 사용자 에이전트는 사용자가 Periodic Background Sync를 비활성화할 수 있는 방법을 제공해야 합니다. Periodic Background Sync가 비활성화된 경우, periodicsync 이벤트는 이 권한의 영향을 받는 주기적 동기화 등록 에 대해 발행되어서는 안 됩니다. (참조: § 7.2 권한 취소에 대응).

5.2. 위치 추적

백그라운드 상태(in the background)에서의 periodicsync 이벤트 내의 fetch 요청은 사용자가 페이지를 떠난 후 서버에 클라이언트의 IP 주소를 노출할 수 있습니다. 사용자 에이전트는 재시도 횟수와 periodicsync 이벤트의 지속 시간을 제한하여 웹사이트가 사용자의 위치를 추적할 수 있는 시간을 줄여야 합니다. 또한 사용자 에이전트는 특정 origin에 대해, 그리고 여러 origin에 걸쳐 periodicsync 이벤트의 빈도를 제한하여 지속적인 위치 추적을 억제해야 합니다.

5.3. 이력 누출

periodicsync 이벤트백그라운드에서 실행될 때의 fetch 요청은, 주기적 동기화 등록을 생성한 네트워크와 다른 네트워크 상의 미들박스(middlebox)에 클라이언트의 탐색 기록에 대한 정보를 드러낼 수 있습니다. 예를 들어, 클라이언트가 https://example.com 사이트를 방문하여 periodicsync 이벤트를 등록했지만, 구현 방식에 따라 사용자가 페이지에서 떠나고 네트워크를 변경한 후에야 이벤트가 발생할 수 있습니다. 새로운 네트워크상의 미들박스는 periodicsync 이벤트가 수행하는 fetch 요청을 볼 수 있습니다. 이 fetch 요청들은 HTTPS로 전송되므로 요청 내용 자체는 유출되지 않지만, 요청 대상과 도메인(예: DNS 조회 및 요청의 IP 주소)은 노출될 수 있습니다. 탐색 이력의 이러한 유출을 방지하기 위해, 사용자 에이전트는 periodicsync 이벤트주기적 동기화 등록이 이루어진 네트워크에서만 발생시키도록 선택할 수 있으며, 이는 동기화를 기회가 있을 때마다 수행하지 못하게 되어 사용성은 줄어들 수 있다는 점을 전제로 합니다.

6. 자원 사용

이 섹션은 비규범적입니다.

웹사이트는 periodicsync 이벤트를 처리할 때 네트워크에서 리소스를 다운로드할 가능성이 큽니다. 기본 운영 체제는 이러한 이벤트를 디스패치하기 위해 사용자 에이전트를 실행시키고, 이벤트 처리를 허용하기 위해 미리 정해진 기간 동안 에이전트를 깨어 있도록 할 수 있습니다. 이 둘 모두 배터리 소모를 초래합니다. 사용자 에이전트는 사용자가 페이지에서 떠났을 때 웹사이트의 자원 사용을 제한하기 위해 이러한 이벤트의 지속 시간과 빈도를 상한해야 합니다.

큰 리소스는 background fetch를 통해 BackgroundFetchManager 인터페이스로 등록하여 다운로드해야 합니다.

또한 사용자 에이전트는 origin에 대한 사용자 참여도(engagement)와 데이터 절약 모드(Data Saving Mode)와 같이 데이터 사용을 일시적으로 줄이려는 사용자의 표시를 고려하여 periodicsync 이벤트의 빈도를 조정해야 합니다.

7. 알고리즘

7.1. 주기적 동기화 등록 처리

사용자 에이전트가 시작될 때, 다음 단계를 병렬로 실행합니다:
  1. 무한 루프 동안:

    1. origin 간 최소 주기적 동기화 간격을 기다립니다.

    2. firedPeriodicSync를 false로 둡니다.

    3. firedPeriodicSync가 false인 동안:

      1. 사용자 에이전트가 정의한 일정 시간만큼 기다립니다.

        참고: 이는 서로 다른 주기적 동기화 등록들을 한 번의 기기 웨이크업으로 묶어 동기화할 때 유용합니다.

      2. 온라인이 될 때까지 기다립니다.

      3. service worker registration registration에 대해, 해당 등록이 unregistered가 아닌 경우, 다음 단계를 해당 registration주기적 동기화 처리 큐대기열에 추가합니다:

        1. originperiodicSyncRegistrationorigin으로 정합니다.

        2. 만약 time of last fire[origin] + 원본에 대한 유효 최소 동기화 간격(origin)이 현재 시각보다 크면, 계속합니다.

        3. registration활성 주기적 동기화 등록들 각각에 대해:

          1. 만약 periodicSyncRegistration상태가 "pending"이 아니면, 계속합니다.

          2. 만약 periodicSyncRegistration기준 시점(anchor time) + periodicSyncRegistrationminimum interval이 현재 시각보다 크면, 계속합니다.

          3. firedPeriodicSync를 true로 설정합니다.

          4. periodicsync 이벤트를 발생시킵니다 (periodicSyncRegistration에 대해).

7.2. 권한 취소에 대응

원본 origin에 대해 name"periodic-background-sync"인 권한이 취소되는 것에 대응하려면, 사용자 에이전트는 다음 단계를 해당 주기적 동기화 처리 큐대기열에 추가해야 합니다:

  1. 해당 origin과 동일한 origin과 연관된 활성 주기적 동기화 등록 각각의 periodic sync registration registration에 대해:

    1. registrationactive periodic sync registrations에서 제거합니다.

8. API 설명

8.1. ServiceWorkerGlobalScope 인터페이스에 대한 확장

partial interface ServiceWorkerGlobalScope {
    attribute EventHandler onperiodicsync;
};

8.2. ServiceWorkerRegistration 인터페이스에 대한 확장

ServiceWorkerRegistration/periodicSync

현재 엔진 중 하나에만 구현되어 있습니다.

Firefox없음Safari없음Chrome80+
Opera없음Edge80+
Edge (Legacy)없음IE없음
Firefox for Android없음iOS Safari없음Chrome for Android80+Android WebView80+Samsung Internet13.0+Opera Mobile없음
[Exposed=(Window,Worker)]
partial interface ServiceWorkerRegistration {
  readonly attribute PeriodicSyncManager periodicSync;
};
A ServiceWorkerRegistration has a periodic sync manager (a PeriodicSyncManager).

The periodicSync attribute’s getter must return the context object's periodic sync manager, initially a new PeriodicSyncManager whose service worker registration is the context object's service worker registration.

8.3. PeriodicSyncManager 인터페이스

PeriodicSyncManager

현재 엔진 중 하나에만 구현되어 있습니다.

Firefox없음Safari없음Chrome80+
Opera67+Edge80+
Edge (Legacy)없음IE없음
Firefox for Android없음iOS Safari없음Chrome for Android80+Android WebView80+Samsung Internet13.0+Opera Mobile57+
[Exposed=(Window,Worker)]
interface PeriodicSyncManager {
    Promise<undefined> register(DOMString tag, optional BackgroundSyncOptions options = {});
    Promise<sequence<DOMString>> getTags();
    Promise<undefined> unregister(DOMString tag);
};

dictionary BackgroundSyncOptions {
    [EnforceRange] unsigned long long minInterval = 0;
};
A PeriodicSyncManager has a service worker registration (a service worker registration).

PeriodicSyncManager/register

현재 엔진 중 하나에만 구현되어 있습니다.

Firefox없음Safari없음Chrome80+
Opera67+Edge80+
Edge (Legacy)없음IE없음
Firefox for Android없음iOS Safari없음Chrome for Android80+Android WebView80+Samsung Internet13.0+Opera Mobile57+
register(tag, options) 메서드는 호출될 때 새로운 promise promise를 반환하고, 다음 단계들을 큐에 등록해야 합니다: 주기적 동기화 처리 큐에.
  1. serviceWorkerRegistration서비스 워커 등록 객체로 둡니다. 이 객체는 context objectPeriodicSyncManager와 연관됩니다.

  2. serviceWorkerRegistrationactive worker가 null이면, promise를 거부 promiseInvalidStateError와 함께 반환하고 이 과정을 중단합니다.

  3. PermissionStatePermissionDescriptor에서 name"periodic-background-sync"일 때 granted가 아니라면, promise를 거부 promiseNotAllowedError와 함께 반환하고 이 과정을 중단합니다.

  4. isBackground라는 boolean 변수를 true로 둡니다.

  5. serviceWorkerRegistrationorigin에 대한 service worker client마다 다음을 수행합니다:

    1. clientframe type이 "top-level" 또는 "auxiliary"이면 isBackground를 false로 설정합니다.

  6. isBackground가 true라면, promise를 거부 promiseInvalidAccessError와 함께 반환하고 이 과정을 중단합니다.

  7. currentRegistrationserviceWorkerRegistration활성 주기적 동기화 등록(active periodic sync registrations)tagtag와 같은 값을 가진 주기적 동기화 등록으로 지정하고, 없다면 null로 둡니다.

  8. currentRegistration이 null이면:

    1. newRegistration을 새로운 주기적 동기화 등록으로 만듭니다.

    2. newRegistrationtagtag로 설정합니다.

    3. newRegistrationminimum intervaloptionsminInterval 값으로 설정합니다.

    4. newRegistrationstate를 "pending"으로 설정합니다.

    5. newRegistrationservice worker registrationserviceWorkerRegistration으로 설정합니다.

    6. newRegistrationanchor time을 현재 시점을 나타내는 타임스탬프로 설정합니다.

    7. newRegistrationserviceWorkerRegistration활성 주기적 동기화 등록에 추가합니다.

    8. promise를 이행(resolve)합니다.

  9. 그 외의 경우(Else):

    1. currentRegistrationminimum intervaloptionsminInterval 멤버와 다르다면:

      1. currentRegistrationminimum intervaloptionsminInterval 값으로 설정합니다.

    2. 그렇지 않고, currentRegistrationstate가 "firing"이면, serviceWorkerRegistrationstate를 "reregistered-while-firing"으로 설정합니다.

    3. promise를 이행(resolve)합니다.

PeriodicSyncManager/getTags

현재 엔진 중 하나에만 구현되어 있습니다.

Firefox없음Safari없음Chrome80+
Opera67+Edge80+
Edge (Legacy)없음IE없음
Firefox for Android없음iOS Safari없음Chrome for Android80+Android WebView80+Samsung Internet13.0+Opera Mobile57+
The getTags() method when invoked, MUST return a new promise promise and enqueue the following steps to the periodic sync processing queue:
  1. serviceWorkerRegistrationPeriodicSyncManager와 연관된 서비스 워커 등록으로 정합니다.

  2. currentTags를 새 list로 초기화합니다.

  3. serviceWorkerRegistrationactive periodic sync registrations의 각 registration에 대해, append하여 registrationtagcurrentTags에 추가합니다.

  4. Resolve하여 promisecurrentTags로 완료합니다.

PeriodicSyncManager/unregister

현재 엔진 중 하나에만 구현되어 있습니다.

Firefox없음Safari없음Chrome80+
Opera67+Edge80+
Edge (Legacy)없음IE없음
Firefox for Android없음iOS Safari없음Chrome for Android80+Android WebView80+Samsung Internet13.0+Opera Mobile57+
The unregister(tag) method when invoked, MUST return a new promise promise and enqueue the following steps to the periodic sync processing queue:
  1. serviceWorkerRegistrationPeriodicSyncManager와 연관된 서비스 워커 등록으로 정합니다.

    1. currentRegistrationserviceWorkerRegistrationactive periodic sync registrationsperiodic sync registration으로 하고, 그 tagtag와 같으면 사용하고, 그렇지 않으면 null로 둡니다.

    2. 만약 currentRegistration가 null이 아니면, serviceWorkerRegistrationactive periodic sync registrations에서 currentRegistration을 제거합니다.

    3. promise를 Resolve합니다.

8.4. periodicsync 이벤트

PeriodicSyncEvent/PeriodicSyncEvent

현재 한 개 엔진에서만 지원됩니다.

Firefox지원 안 함Safari지원 안 함Chrome80+
Opera67+Edge80+
Edge (레거시)지원 안 함IE지원 안 함
Android용 Firefox지원 안 함iOS Safari지원 안 함Android용 Chrome80+Android WebView80+Samsung 인터넷13.0+Opera Mobile57+

PeriodicSyncEvent

현재 한 개 엔진에서만 지원됩니다.

Firefox지원 안 함Safari지원 안 함Chrome80+
Opera67+Edge80+
Edge (레거시)지원 안 함IE지원 안 함
Android용 Firefox지원 안 함iOS Safari지원 안 함Android용 Chrome80+Android WebView80+Samsung 인터넷13.0+Opera Mobile57+
dictionary PeriodicSyncEventInit : ExtendableEventInit {
    required DOMString tag;
};

[Exposed=ServiceWorker]
interface PeriodicSyncEvent : ExtendableEvent {
    constructor(DOMString type, PeriodicSyncEventInit init);
    readonly attribute DOMString tag;
};

PeriodicSyncEvent/tag

현재 한 개 엔진에서만 지원됩니다.

Firefox지원 안 함Safari지원 안 함Chrome80+
Opera67+Edge80+
Edge (레거시)지원 안 함IE지원 안 함
Android용 Firefox지원 안 함iOS Safari지원 안 함Android용 Chrome80+Android WebView80+Samsung 인터넷13.0+Opera Mobile57+
PeriodicSyncEventtag ( tag)를 갖습니다. tag 특성은 초기화된 값을 반환해야 합니다.

8.4.1. periodicsync 이벤트 발동

참고: 사용자 에이전트는 PeriodicSyncEvent 의 수명 연장 및 실행 시간에 일반적인 ExtendableEvent 보다 더 엄격한 시간 제한을 적용할 수 있습니다. 특히, PeriodicSyncEvent 의 재시도는 현저하게 축소된 시간 제한이 적용될 수 있습니다.
periodicsync 이벤트를 발동하려면 주기적 동기화 등록 registration에 대해 사용자 에이전트는 다음 단계들을 수행해야 합니다:
  1. serviceWorkerRegistrationregistration서비스 워커 등록으로 둡니다.

  2. registration이 더 이상 serviceWorkerRegistration활성 주기적 동기화 등록에 포함되어 있지 않으면, 이 단계를 중단합니다.

  3. 확인: registration상태가 "pending"임을 확인합니다.

  4. retryCount를 0으로 설정합니다.

  5. registration상태를 "firing"으로 설정합니다.

  6. 다음이 참일 동안:

    1. continue를 false로 둡니다.

    2. success를 false로 둡니다.

    3. 기능 이벤트 "periodicsync"를 PeriodicSyncEvent를 사용하여 serviceWorkerRegistration에서 tagregistrationtag로 지정해 발동합니다. dispatchedEvent라는 ExtendableEvent가 발동된 periodicsync 이벤트를 나타내며, dispatchedEvent로 다음 단계를 수행합니다:

    4. waitUntilPromise모두 대기의 결과값으로, dispatchedEvent수명 확장 프로미스로 지정합니다.

    5. 이행될 때 waitUntilPromise는 다음 단계를 실행합니다:

      1. success를 true로 둡니다.

      2. continue를 true로 둡니다.

    6. 거부시 거부 시 waitUntilPromise는 다음 단계를 실행합니다:

      1. continue를 true로 둡니다.

    7. 병렬로:

      1. continue가 true가 될 때 까지 기다립니다.

      2. originorigin으로 등록하고, registration서비스 워커 등록에 연관된 값으로 지정합니다.

      3. success가 true이면, 마지막 발동 시간origin 키로 현재 시간으로 설정합니다.

      4. success가 true이거나 retryCount최대 재시도 횟수보다 크거나, registration의 상태가 "reregistered-while-firing"라면:

        1. registration상태를 "pending"으로 변경합니다.

        2. registration기준 시간을 현재를 의미하는 타임스탬프로 설정합니다.

        3. 이 단계를 중단합니다.

    8. retryCount를 증가시킵니다.

    9. retryCount에 따라 작은 백오프 시간만큼 대기합니다.

적합성

문서 규약

적합성 요구 사항은 설명적 명제와 RFC 2119 용어의 조합으로 표현됩니다. “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, 그리고 “OPTIONAL”과 같은 이 문서의 규범적 부분에 나타나는 주요 단어들은 RFC 2119에 설명된 대로 해석해야 합니다. 하지만, 가독성을 위해 이 규격에서는 이러한 단어들이 모두 대문자로 나타나지 않을 수도 있습니다.

이 명세의 모든 텍스트는 명시적으로 비규범임, 예시, 참고로 표시된 부분을 제외하고는 모두 규범적입니다. [RFC2119]

이 명세서에서 예시는 “예를 들어”라는 문구로 도입되거나, 규범 텍스트와 분리되어 class="example"로 지정되어 있습니다, 예시:

이것은 참고용 예시입니다.

참고 사항은 “참고”라는 말로 시작되며, class="note"로 표시되어 규범 텍스트와 구분됩니다, 아래와 같습니다:

참고, 이것은 참고용 안내문입니다.

적합 알고리즘

알고리즘의 명령문에 의해 기술된 요구 사항(예: "모든 선행 공백 문자를 제거" 또는 "false를 반환하고 이 단계를 중단") 은 도입문에서 사용된 주요 단어("must", "should", "may" 등)의 의미로 해석해야 합니다.

알고리즘이나 구체적 단계로 기술된 적합성 요구 사항은 어떤 방식으로든 구현가능하며, 동일한 결과가 나오면 됩니다. 특히, 이 명세에서 정의된 알고리즘은 이해하기 쉽게 작성되어 있으며, 성능을 고려하지 않은 것입니다. 구현자는 최적화를 권장합니다.

색인

이 명세에서 정의된 용어

참조에 의해 정의된 용어

참고문헌

규범적 참고문헌

[BACKGROUND-FETCH]
Background Fetch. cg-draft. URL: https://wicg.github.io/background-fetch/
[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[PERMISSIONS]
Mounir Lamouri; Marcos Caceres; Jeffrey Yasskin. Permissions. 2020년 7월 20일. WD. URL: https://www.w3.org/TR/permissions/
[RFC2119]
S. Bradner. RFC에서 요구사항 레벨을 나타내는 주요 단어들. 1997년 3월. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119
[SERVICE-WORKERS-1]
Alex Russell; 등. Service Workers 1. 2019년 11월 19일. CR. URL: https://www.w3.org/TR/service-workers-1/
[WEB-BACKGROUND-SYNC]
Web Background Synchronization. cg-draft. URL: https://wicg.github.io/background-sync/spec/
[WebIDL]
Boris Zbarsky. Web IDL. 2016년 12월 15일. ED. URL: https://heycam.github.io/webidl/

IDL 색인

partial interface ServiceWorkerGlobalScope {
    attribute EventHandler onperiodicsync;
};

[Exposed=(Window,Worker)]
partial interface ServiceWorkerRegistration {
  readonly attribute PeriodicSyncManager periodicSync;
};

[Exposed=(Window,Worker)]
interface PeriodicSyncManager {
    Promise<undefined> register(DOMString tag, optional BackgroundSyncOptions options = {});
    Promise<sequence<DOMString>> getTags();
    Promise<undefined> unregister(DOMString tag);
};

dictionary BackgroundSyncOptions {
    [EnforceRange] unsigned long long minInterval = 0;
};

dictionary PeriodicSyncEventInit : ExtendableEventInit {
    required DOMString tag;
};

[Exposed=ServiceWorker]
interface PeriodicSyncEvent : ExtendableEvent {
    constructor(DOMString type, PeriodicSyncEventInit init);
    readonly attribute DOMString tag;
};