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

JSPI (JavaScript Promise Integration)는 WebAssembly에 컴파일된 동기 순차 코드를 통해 비동기 웹 API에 액세스할 수 있도록 하는 API입니다. 많은 Web API가 자바스크립트 프로미스 측면에서 제작됩니다. 즉, 요청된 작업을 즉시 실행하는 대신 프로미스를 반환합니다. 작업이 최종적으로 수행되면 브라우저의 작업 실행기가 프로미스와 함께 콜백을 호출합니다. 이 아키텍처에 JSPI가 연결되어 프로미스가 반환될 때 WebAssembly 애플리케이션이 정지되고 프로미스 리졸브 시 다시 시작될 수 있습니다.

Chrome 123부터 Chrome 128까지는 JSPI가 오리진 트라이얼로 제공됩니다. WebAssembly JavaScript Promise Integration API 소개 블로그 게시물 또는 사양 초안에서 JSPI에 대해 자세히 알아보세요.

이 기능을 사용하는 방법을 더 잘 이해하려면 추가 함수를 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

다음과 같이 자바스크립트에서 기능 감지 JSPI 지원을 사용할 수 있습니다.

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

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

애플리케이션의 실제 사용자와 함께 JSPI를 사용해 보려면 오리진 트라이얼에 가입하세요. 자세한 내용은 오리진 트라이얼 시작하기를 참고하세요. JSPI팀은 기능 출시 시 요구사항에 부합하기 위해 오리진 트라이얼 의견 (안내의 5단계 참고)을 받을 수 있기를 기대하고 있습니다.