WebAssembly JavaScript Promise Integration (JSPI) bước vào bản dùng thử theo nguyên gốc

Tích hợp lời hứa JavaScript (JSPI) là một API cho phép mã tuần tự đồng bộ được biên dịch sang WebAssembly để truy cập vào các API Web không đồng bộ. Nhiều API web được tạo theo lời hứa JavaScript: thay vì thực hiện ngay thao tác được yêu cầu, các API này sẽ trả về một lời hứa để thực hiện thao tác đó. Khi hành động cuối cùng được thực hiện, trình chạy tác vụ của trình duyệt sẽ gọi mọi lệnh gọi lại bằng lời hứa. JSPI sẽ liên kết với cấu trúc này để cho phép tạm ngưng một ứng dụng WebAssembly khi lời hứa được trả về và tiếp tục khi lời hứa được giải quyết.

Từ Chrome 123 cho đến Chrome 128, JSPI được cung cấp dưới dạng bản dùng thử theo nguyên gốc. Tìm hiểu thêm về JSPI trong bài đăng trên blog Giới thiệu API tích hợp WebAssembly JavaScript Promise hoặc trong bản nháp thông số kỹ thuật.

Để hiểu rõ hơn về cách sử dụng tính năng này, hãy xem xét đoạn trích sau đây của một chương trình C tính toán dãy Fibonacci bằng cách thuê ngoài phép cộng cho một hàm JavaScript.

// 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);
});

Để biên dịch chương trình C này thành WebAssembly, hãy sử dụng lệnh sau. Lệnh này yêu cầu SDK Emscripten.

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

Bạn có thể phát hiện tính năng hỗ trợ JSPI từ JavaScript như sau:

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

Bạn có thể xem bản minh hoạ JSPI từ mã mẫu trước đó trên Glitch và cũng được nhúng trong phần sau. Bạn có thể xem mã nguồn do Emscripten tạo nếu muốn, nhưng mã thực sự thú vị là chương trình C ban đầu (nhấp vào đường liên kết này để tải mã xuống).

Để dùng thử JSPI với người dùng thực tế của ứng dụng, hãy đăng ký dùng thử phiên bản gốc. Hãy đọc bài viết Bắt đầu dùng thử phiên bản gốc nếu bạn cần hướng dẫn. Nhóm JSPI rất mong nhận được ý kiến phản hồi của bạn về bản dùng thử nguyên gốc (xem Bước 5 trong hướng dẫn) để tính năng này phù hợp với nhu cầu của bạn khi được cung cấp!