Package Exports
- synckit
Readme
synckit
Perform async work synchronously in Node.js using worker_threads with first-class TypeScript support.
TOC
Usage
Install
# yarn
yarn add synckit
# npm
npm i synckitAPI
// runner.js
import { createSyncFn } from 'synckit'
// the worker path must be absolute
const syncFn = createSyncFn(require.resolve('./worker'))
// do whatever you want, you will get the result synchronously!
const result = syncFn(...args)// worker.js
import { runAsWorker } from 'synckit'
runAsWorker(async (...args) => {
// do expensive work
return result
})You must make sure, the result is serializable by Structured Clone Algorithm
Envs
SYNCKIT_BUFFER_SIZE:bufferSizeto createSharedArrayBufferforworker_threads(default as1024)SYNCKIT_TIMEOUT:timeoutfor performing the async job (no default)SYNCKIT_EXEC_ARGV: List of node CLI options passed to the worker, split with comma,. (default as[]), see alsonodedocs
TypeScript
If you want to use ts-node for worker file (a .ts file), it is supported out of box!
If you want to use a custom tsconfig as project instead of default tsconfig.json, use TS_NODE_PROJECT env. Please view ts-node for more details.
If you want to integrate with tsconfig-paths, please view ts-node for more details.
Benchmark
It is about 20x faster than sync-threads but 3x slower than native for reading the file content itself 1000 times during runtime, and 18x faster than sync-threads but 4x slower than native for total time.
And it's almost same as deasync but requires no native bindings or node-gyp.
See benchmark.cjs and benchmark.esm for more details.
You can try it with running yarn benchmark by yourself. Here is the benchmark source code.
Sponsors
| 1stG | RxTS | UnTS |
|---|---|---|
Backers
| 1stG | RxTS | UnTS |
|---|---|---|
Changelog
Detailed changes for each release are documented in CHANGELOG.md.