https://github.com/mjancarik/esmj-task
https://github.com/mjancarik/esmj-task
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/mjancarik/esmj-task
- Owner: mjancarik
- License: mit
- Created: 2023-08-25T10:53:12.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-04-14T16:30:24.000Z (6 months ago)
- Last Synced: 2025-08-03T02:25:02.836Z (3 months ago)
- Language: JavaScript
- Size: 31.3 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Task
The `@esmj/task` is tiny package for divide long task to new tasks and improve browser responsiveness, user experience and INP (core web vitals) metric. The new tasks are creating only if it is need.
## Requirements
- Node 18+
## Install
```shell
npm install @esmj/task
```## Usage
It works for both Javascript modules (ESM and CJS).
```javascript
import { autoYield, autoYieldStartPoint } from '@esmj/task';(async () => {
const tasks = [
longRunnigTask1,
normalTask1,
normalTask2,
longRunnigTask2
];autoYieldStartPoint()
for (const task of tasks) {
await autoYield()
await task();
}
})```
## API
### autoYield()
Type: `() => Promise`
Method divide long task to new tasks if it is need. If `autoYield` method is called without set start point with `autoYieldStartPoint` method then the first call of `autoYield` method is `forceYield`. If autoYield logic is turn off then returns immediately resolved Promise.### forceYield()
Type: `() => Promise`
Method create new task for every call, yield to next event loop (0 ms delay).### nextFrameYield()
Type: `() => Promise`
Method create new task for every call, yield to next frame (16 ms delay).### autoYieldReset
Type: `() => void`
Method reset logic for creating new tasks.### autoYieldStartPoint
Type: `() => void`
Method set start point for `autoYield` method so first call of `autoYield` method not create new task with `forceYield`.### setConfig
Type: `({ autoEnable: boolean, autoShareContext: boolean }) => void`
Method config package autoEnable: turn on/off autoYield logic and autoShareContext: turn on/off shared context through global variable.