WebAssembly JavaScript Promise Integration (JSPI), 오리진 트라이얼 시작

JavaScript Promise Integration (JSPI)은 WebAssembly로 컴파일된 동기 순차 코드가 비동기 웹 API에 액세스할 수 있도록 하는 API입니다. 많은 웹 API는 JavaScript 약속을 기준으로 작성됩니다. 요청된 작업을 즉시 실행하는 대신 이를 실행할 약속을 반환합니다. 작업이 최종적으로 실행되면 브라우저의 작업 실행자가 약속을 사용하여 모든 콜백을 호출합니다. JSPI는 이 아키텍처에 후크되어 프로미스가 반환될 때 WebAssembly 애플리케이션이 일시중지되고 프로미스가 해결될 때 재개되도록 합니다.

Chrome 123부터 Chrome 128까지 JSPI는 오리진 트라이얼로 제공됩니다. JSPI에 대한 자세한 내용은 블로그 게시물 WebAssembly JavaScript Promise Integration API 소개 또는 사양 초안을 참조하세요.

이 기능을 사용하는 방법을 더 잘 이해하려면 다음과 같이 JavaScript 함수에 추가를 아웃소싱하여 피보나치 수열을 계산하는 C 프로그램의 발췌 부분을 살펴보세요.

// This is C code.
long promiseFib(long x) {
  if (x == 0)
    return 0;
  if (x == 1)
    return 1;
  // This is where the C code calls asynchronous JavaScript.
  return promiseAdd(promiseFib(x - 1), promiseFib(x - 2));
}

// Addition artificially wrapped in a Promise.
EM_ASYNC_JS(long, promiseAdd, (long x, long y), {
  // This is asynchronous JavaScript code.
  return Promise.resolve(x+y);
});

이 C 프로그램을 WebAssembly로 컴파일하려면 다음 명령어를 사용하세요. 이 명령어를 사용하려면 Emscripten SDK가 필요합니다.

emcc -O3 badfib.c -o index.html -s ASYNCIFY=2

다음과 같이 JavaScript에서 JSPI 지원을 특성 감지할 수 있습니다.

if ('Suspender' in WebAssembly) {
  // JSPI is supported.
}

이전 코드 샘플의 JSPI 데모는 Glitch에서 확인할 수 있으며 다음에 삽입되어 있습니다. 원하는 경우 Emscripten에서 생성된 소스 코드를 볼 수 있지만 실제로 흥미로운 코드는 원본 C 프로그램입니다(이 링크를 클릭하면 코드가 다운로드됨).

애플리케이션의 실제 사용자를 대상으로 JSPI를 사용해 보려면 Origin Trial에 가입하세요. 안내가 필요한 경우 출처 무료 체험판 시작하기를 참고하세요. JSPI팀은 기능이 출시될 때 사용자의 요구사항에 맞을 수 있도록 오리진 체험판에 대한 의견 (안내의 5단계 참고)을 기다리고 있습니다.