For Modern browsers and node. Zero direct dependencies.
The library offers you an API that have the look & feel of a regular javascript object, while the data is saved to an ArrayBuffer that can be shared or transferred to a WebWorker.
The library is still not complete, and will never offer full compatibility with plain js objects due, to the nature of the language and the problems space.
See also main.js for shared memory example.
to run it: clone the repo, yarn install and yarn browser-playground
Exchanging data with WebWorkers (other than ArrayBuffer) is done by serializing and copying the data to the other side.
for some use-cases, it’s slow and memory expensive.
ArrayBuffer can be transferred without a copy, and SharedArrayBuffer can be directly shared, but out of the box, it’s hard to use ArrayBuffer as more than a TypedArray.
SharedArrayBuffer and ArrayBuffer
Personal interest. Maybe will be useful as shared memory primitive, and communicating with WASM. Maybe state management with shared memory across workers?
It’s working! but very unoptimized (eg objects are simple linked lists), only append data (no logic to reuse unreachable memory)
and its not extending the backing arraybuffer size by itself.
if you exceed the sb size, an exception will be thrown.
ArrayBuffer.prototype.transfer is still not supported anywhere, so we can’t do that efficiently anyhow
JSON.stringifyMapSetbigint bigger than 64 bitJSON.stringifySymbolThere’s a huge place for optimizations, code hygiene, and features!
Feel free to open issues and maybe implementing missing parts