JavaScript Promise Integration(JSPI)은 WebAssembly로 컴파일된 동기 순차 코드가 비동기 웹 API에 액세스할 수 있도록 하는 API입니다. 많은 웹 API는 JavaScript 약속을 기준으로 작성됩니다. 요청된 작업을 즉시 실행하는 대신 이를 실행하는 약속을 반환합니다. 작업이 최종적으로 실행되면 브라우저의 작업 러너가 약속을 사용하여 모든 콜백을 호출합니다. JSPI는 이 아키텍처에 연결하여 프라미스가 반환될 때 WebAssembly 애플리케이션이 정지되도록 허용 프라미스가 해결되면 재개됩니다.
Chrome 123부터 Chrome 128까지 JSPI는 오리진 트라이얼로 사용할 수 있습니다. 블로그 게시물에서 JSPI에 대해 자세히 알아보기 WebAssembly JavaScript Promise Integration API 소개 또는 사양 초안 작성.
이 기능의 사용 방법을 더 잘 이해하려면 다음을 고려하세요. 피보나치 수열을 아웃소싱하여 피보나치 수열을 계산하는 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를 사용해 보려면 오리진 트라이얼에 가입하세요. 안내가 필요한 경우 출처 무료 체험판 시작하기를 참고하세요. JSPI팀에서 여러분의 의견을 기다리고 있습니다. 체험판 의견 (5단계 참고) 안내)에 따라 기능이 배송될 때 필요에 맞게 조정됩니다.