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.stringify
Map
Set
bigint
bigger than 64 bitJSON.stringify
Symbol
There’s a huge place for optimizations, code hygiene, and features!
Feel free to open issues and maybe implementing missing parts