This package provides an implementation of the ModelRunner interface (from the @sdeverywhere/runtime package) that uses a Web Worker (in the browser) or a worker thread (in a Node.js app) to run the model asynchronously off the main JavaScript thread.
The best way to get started with SDEverywhere is to follow the Quick Start instructions.
If you follow those instructions, the @sdeverywhere/runtime-async package will be added to your project automatically, in which case you can skip the next section and jump straight to the "Usage" section below.
# npm
npm install @sdeverywhere/runtime-async
# pnpm
pnpm add @sdeverywhere/runtime-async
# yarn
yarn add @sdeverywhere/runtime-asyncNOTE: If you followed the "Quick Start" instructions and/or used the
@sdeverywhere/create package to generate your project, the initialization
steps listed below are already implemented for you in the generated core package,
and you can work directly with a ModelRunner and/or ModelScheduler instance.
In your app project, define a separate JavaScript file, called
worker.js for example, that initializes the generated model in the
context of the Web Worker:
import { exposeModelWorker } from '@sdeverywhere/runtime-async/worker'
import loadGeneratedModel from './sde-prep/generated-model.js'
exposeModelWorker(loadGeneratedModel)In your web app, call the spawnAsyncModelRunner function, which will
spawn the Web Worker and initialize the ModelRunner that communicates
with the worker:
import { spawnAsyncModelRunner } from '@sdeverywhere/runtime-async/runner'
async function initApp() {
// ...
const runner = await spawnAsyncModelRunner({ path: './worker.js' })
// ...
}API documentation is available in the docs directory.
SDEverywhere is distributed under the MIT license. See LICENSE for more details.