SharedArrayBuffer: cloning vs transferring?
You're asking about how postMessage() handles a SharedArrayBuffer, since the spec changed last summer from requiring the buffer to be in the transfer list to forbidding it. For the time being, Firefox allows the SAB to be in the transfer list but prints a warning in the console; by and by we will throw an error for that (and until then we'll fail any test cases that test for an exception). This is implemented in Firefox 51, if my testing right now is correct.
Since no browser has officially shipped this functionality I think some browser sniffing may be reasonable for early adopters who want to operate in a multi-browser setting. I would expect that when this functionality is enabled by default in a browser the browser would adhere to the spec.
Thanks! This worked for me for a toy example (for multiple calls, I’d record whether an exception was thrown during the first try):
try {
// Try new API (clone)
worker.postMessage({sharedBuffer});
} catch (e) {
// Fall back to old API (transfer)
worker.postMessage({sharedBuffer}, [sharedBuffer]);
}
Complete source code: rauschma/shared-array-buffer-demo/blob/master/main.js
Axel
If you encounter a most-current-release browser that requires the transfer form of postmessage, could you follow up here so that I can bug the appropriate person about it? Thanks.
Will do!
AFAICT, all current implementations want you to transfer SABs. What’s the best way to prepare for the future?
try
transferring and clone in thecatch
clause?Thanks!
Axel
-- Dr. Axel Rauschmayer rauschma.de [Sent from a mobile device, please forgive brevity and typos]