在以前的Chrome版本中,SharedArrayBuffer被认为是一种安全风险,已经被暂时禁用。但是,在Chrome 88中,SharedArrayBuffer被重新启用作为在Web Workers中共享二进制数据缓冲区的主要方法。这为Web Assembly等性能密集型应用程序的性能提供了显着的提升。
为了使用SharedArrayBuffer,需要调用以下方法:
const sab = new SharedArrayBuffer(1024); // 创建缓冲区
const sabView = new Int32Array(sab); // 创建视图
// 在另一个Worker中访问同一个缓冲区
const worker = new Worker('worker.js');
worker.postMessage(sab);
// 等待Worker向本地缓冲区写入值
onmessage = evt => console.log(sabView[0]);
但是,在Chrome 92的桌面版和Chrome 88的Android版中,将禁用一些特定的SharedArrayBuffer API,需要在HTTP标头中使用Cross-Origin-Opener-Policy和Cross-Origin-Embedder-Policy来允许共享缓冲区。
例如,在服务器端可以使用以下代码来设置这些标头:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
这样,SharedArrayBuffer就可以在桌面版Chrome 92和Android版Chrome 88中正常工作了。