objectbuffer

WIP: object-like API, backed by a [shared]arraybuffer

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.

Play with it

Edit objectbuffer demo - SharedArrayBuffer

See also main.js for shared memory example. to run it: clone the repo, yarn install and yarn browser-playground

Why

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

Motivation

Personal interest. Maybe will be useful as shared memory primitive, and communicating with WASM. Maybe state management with shared memory across workers?

What do we have in hand

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

What’s working

Missing parts

What’s not working yet, but can be

What’s probably never going to work (convince me otherwise )

Contribution / Collaboration

There’s a huge place for optimizations, code hygiene, and features!
Feel free to open issues and maybe implementing missing parts