如果我创建一个
SharedArrayBuffer
,然后通过 TypedArray
创建所述缓冲区的“视图”,然后通过 TypedArray
将 Worker
发送到 postMessage
,工作人员是否能够访问完整的TypedArray
的数据?
是的,完整的底层缓冲区与 Web Worker 共享:
<!-- test.html -->
<script>
// Main thread
const sharedBuffer = new SharedArrayBuffer(100);
const fullBuffer = new Uint8Array(sharedBuffer);
fullBuffer.set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); // Fill the start of the buffer with some data
const partOfBuffer = new Uint8Array(sharedBuffer, 5); // Create a view that leaves off the first few numbers
const worker = new Worker('worker.js');
worker.postMessage(partOfBuffer);
</script>
// worker.js
onmessage = function(e) {
const partOfBuffer = e.data;
console.log(new Uint8Array(partOfBuffer.buffer)); // logs the full buffer data - i.e. including the first few numbers
}