@speckle/objectloader2
Version:
This is an updated objectloader for the Speckle viewer written in typescript
43 lines (30 loc) • 1.37 kB
Markdown
# objectloader2 for the Speckle viewer
This is an updated object loader for the Speckle viewer rewritten in Typescript.
The main aim for the objectloader is:
- download Speckle objects as JSON
- cache in IndexedDB so the same objects aren't downloaded twice
- give data to the viewer, as returned by the `getObjectIterator` generator, as soon as possible
- do the above as concurrently as a browser allows
## Architecture
To achieve increased concurrency, the different phases of the objectloader are divided into pools of workers with queues to feed them.
```mermaid
flowchart TD
start(Root Commit)
getIds(Parse Root to get all IDs)
cached{Cached?}
download(Download IDs)
save(Write to Cache)
load(Load from Cache)
generate(Generate to Viewer!)
start --> getIds
getIds --> cached
cached -->|Yes| load
cached -->|No| download
load --> generate
download --> generate
download --> save
```
From the list of IDs, they are moved to a queue to be begin checking the cache from a pool of readers.
Results are then sent to the viewer, if found, else they're send to the download queue.
The download queue is a batching mechanism that gets what is available, up to a limit or a timeout. The results are parsed and given to the generator and written to another queue.
The write cache queue is processed with a single writer to the indexeddb.