concurrent-tasks
Advanced tools
Comparing version 1.0.0 to 1.0.1
{ | ||
"name": "concurrent-tasks", | ||
"version": "1.0.0", | ||
"version": "1.0.1", | ||
"description": "A simple task runner which will run tasks in parallel while maintaining limits.", | ||
@@ -5,0 +5,0 @@ "author": "Samrith Shankar", |
251
README.md
@@ -1,4 +0,5 @@ | ||
# <span style="display: flex; align-items: center">![logo][icon] <span style="margin-left: 10px">Concurrent Tasks</span> | ||
# <img src="https://raw.githubusercontent.com/samrith-s/concurrent-tasks/master/icons/icon-x64.png" style="vertical-align: middle"> Concurrent Tasks | ||
[![npm][npm_v]][npm_package] | ||
[![size][size_img]][size] | ||
[![npm][npm_dw]][npm_package] | ||
@@ -11,6 +12,252 @@ [![GitHub issues][gh_issues]][github_issues] | ||
For a detailed documentation, visit [the website][website]. | ||
The following is a quick reference guide to help you get friendly with **Concurrent Tasks**. Visit [the website][website] for a detailed documentation. | ||
# Table of Contents | ||
- [👶🏻 Introduction](#introduction) | ||
- [🎬 Getting Started](#getting-started) | ||
- [🏁 The Done Callback](#the-done-callback) | ||
- [⚒ Configuration](#configuration) | ||
- [🕹 API](#api) | ||
- [add](#api-add) | ||
- [addFirst](#api-add-first) | ||
- [addMultiple](#api-add-multiple) | ||
- [addMultipleFirst](#api-add-multiple-first) | ||
- [remove](#api-remove) | ||
- [removeFirst](#api-remove-first) | ||
- [removeAt](#api-remove-at) | ||
- [removeAll](#api-remove-all) | ||
- [start](#api-start) | ||
- [setConcurrency](#api-set-concurrency) | ||
- [isBusy](#api-is-busy) | ||
- [💪🏼 Powered by Concurrent Tasks](#powered-by-concurrent-tasks) | ||
- [👩🏻💻 Contributing](#contributing) | ||
- [🧐 Issues](#issues) | ||
- [🗺 Roadmap](#roadmap) | ||
- [🔑 License](#license) | ||
# 👶🏻 Introduction <a name="introduction"></a> | ||
Concurrent Tasks mimics a priority queue by using JavaScript's inbuilt array data type. Each task is a function which signals completion back to the `TaskRunner`. Once tasks are added, the instance starts executing them until the concurrency criteria is met. Once even a single task is complete (it calls the `done` callback), the next task in the queue is picked up. | ||
### What can I use it with? | ||
The minimalism of Concurrent Tasks makes it an easy-to-use solution across any framework or flavour of JavaScript. It has ZERO dependencies and can be used virtually in any scenario. | ||
- ✅ Vanilla JavaScript | ||
- ✅ Frontend Frameworks (React, Vue, Angular, etc) | ||
- ✅ Backend Frameworks (Express, Hapi, Koa, etc) | ||
- ✅ NPM Module | ||
- ✅ Node CLI Application | ||
# 🎬 Getting Started <a name="getting-started"></a> | ||
Via NPM | ||
``` | ||
npm install concurrent-tasks | ||
``` | ||
Or the script tag | ||
``` | ||
<script src="https://unpkg.com/concurrent-tasks/umd/concurrent-tasks.min.js" type="text/javascript"></script> | ||
``` | ||
### Usage | ||
```javascript | ||
import TaskRunner from 'concurrent-tasks'; | ||
| ||
const runner = new TaskRunner(); | ||
| ||
function generateTasks() { | ||
const tasks = []; | ||
let count = 1000; | ||
while(count) { | ||
tasks.push(done => { | ||
setTimeout(() => { | ||
done(); | ||
}, Math.random() * 1000) | ||
}); | ||
count--; | ||
} | ||
return tasks; | ||
} | ||
| ||
runner.addMultiple(generateTasks()); | ||
``` | ||
**Important:** Each task passed to the task runner, necessarily has to call the done function. If not, your queue won't process properly. | ||
# 🏁 The Done Callback <a name="the-done-callback"></a> | ||
In JavaScript, it gets very difficult for tasks to talk to each other. A lot of times, we need to maintain a map of running tasks and call a function which will update the value and call the next task. | ||
**Concurrent Tasks** is a JavaScript module, which runs multiple tasks in parallel until all the tasks are complete. It needs a way to figure out when a particular task has been completed. | ||
### Solution | ||
Gulp solves this problem by either accepting a return of a Gulp task, or by calling a function done. Similarly, to solve the exact same problem, each task passed to the TaskRunner has access to a special function called done (ingenuity max). | ||
### Purpose | ||
The purpose of this function is simple: Tell the instance when a particular task is complete! Internally, the done function does a fair amount of work. It: | ||
- Makes a free slot available for the internal runner. | ||
- Updates completion counts and calls the internal runner. | ||
- Updates the time elapsed from start, until the function calling `done`'s completion. | ||
- Calls the internal runner to pick up the next task in the priority queue. | ||
### Examples | ||
For some examples on how you can use the callback, head over to the [docs](https://concurrent-tasks.js.org/the-done-callback#examples). | ||
# ⚒ Configuration <a name="configuration"></a> | ||
| Property | Type | Default | Description | | ||
| ----------- | ---------- | ------------------------- | ------------------------------------------------------------ | | ||
| concurrency | `Number` | `3` | Set the batch size of the task runner. | | ||
| autoStart | `Boolean` | `true` | Decides whether to start executing tasks automatically. | | ||
| name | `String` | `Runner <instance-count>` | A unique name to identify the `TaskRunner` instance. | | ||
| onAdd | `Function` | `undefined` | Fired every time `add` is called. | | ||
| onStart | `Function` | `undefined` | Fired every time the runner goes from idle to working state. | | ||
| onDone | `Function` | `undefined` | Fired each time a task calls `done` callback. | | ||
| onEnd | `Function` | `undefined` | Fired every time the runner goes from working to idle state. | | ||
# 🕹 API <a name="api"></a> | ||
The following methods are provided by **Concurrent Tasks** to help you in manipulating your task list and get the most out of the module. | ||
### add <a name="api-add"></a> | ||
Adds a task to the task list. | ||
```javascript | ||
add(task: Function, [first: Boolean]) | ||
``` | ||
### addFirst <a name="api-add-first"></a> | ||
Adds a task to the beginning of the task list. | ||
```javascript | ||
addFirst(task: Function, [first: Boolean]) | ||
``` | ||
### addMultiple <a name="api-add-multiple"></a> | ||
Adds a collection of tasks to the task list. | ||
```javascript | ||
addMultiple(tasks: Array.Function, [first: Boolean]) | ||
``` | ||
### addMultipleFirst <a name="api-add-multiple-first"></a> | ||
Adds a collection of tasks to the beginning task list. | ||
```javascript | ||
addMultipleFirst(tasks: Array.Function) | ||
``` | ||
### remove <a name="api-remove"></a> | ||
Remove a task from the task list. | ||
```javascript | ||
remove([first: Boolean]) | ||
``` | ||
### removeFirst <a name="api-remove-first"></a> | ||
Remove the first task from the task list. | ||
```javascript | ||
removeFirst(); | ||
``` | ||
### removeAt <a name="api-remove-at"></a> | ||
Remove a task at a particular index from the task list. | ||
```javascript | ||
removeAt(index: Number) | ||
``` | ||
### removeAll <a name="api-remove-all"></a> | ||
Removes all tasks in the task list. | ||
```javascript | ||
removeAll(); | ||
``` | ||
### start <a name="api-start"></a> | ||
Programmatically start processing the first batch of tasks from the task list. | ||
```javascript | ||
start(); | ||
``` | ||
### setConcurrency <a name="api-set-concurrency"></a> | ||
Set the concurrency limit on an already-running or a idle instance. | ||
```javascript | ||
setConcurrency(concurrency: Number) | ||
``` | ||
### isBusy <a name="api-is-busy"></a> | ||
Get the current state of the instance (idle or busy). | ||
```javascript | ||
isBusy(); | ||
``` | ||
# 💪🏼 Powered by Concurrent Tasks <a name="powered-by-concurrent-tasks"></a> | ||
If you'd like to showcase any: | ||
- Website | ||
- Package | ||
- Framework | ||
- API | ||
That's been powered by **Concurrent Tasks**, you can get in touch on [Twitter](https://twitter.com/tueieo) or just use [#poweredByConcurrentTasks](https://twitter.com/search?f=tweets&q=%23poweredByConcurrentTasks&src=typd) and it'll be featured here! | ||
# 👩🏻💻 Contributing <a name="contributing"></a> | ||
We ❤️ contributions! We are looking for people who echo our sentiments and share the same idea about **Concurrent Tasks**. Check out the [contributing guidelines](https://github.com/samrith-s/concurrent-tasks/blob/master/CONTRIBUTING.md). | ||
# 🧐 Issues <a name="issues"></a> | ||
For any issues or queries you might have about the table, please feel free to create one in the [issues section](https://github.com/samrith-s/concurrent-tasks/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc). | ||
# 🗺 Roadmap <a name="roadmap"></a> | ||
- ✅ Custom concurrency. | ||
- ✅ Events for task addition, idle state change, `done` callback firing. | ||
- ✅ Programmatic and automatic start. | ||
- ✅ Different kinds of addition and removal. | ||
- ❌ Priority value for each task. | ||
- ❌ Storing tasks as a map of priorities. | ||
- ❌ Adding/removing tasks to/from an existing priority. | ||
- ❌ Adding/removing multiple tasks to/from an existing priority. | ||
- ❌ Adding tasks to a new priority. | ||
- ❌ Adding multiple tasks to a new priority. | ||
- ❌ Removal of a priority. | ||
# 🔑 License <a name="license"></a> | ||
This project is under the [MIT License](https://opensource.org/licenses/MIT). You can checkout the project's [license](https://github.com/samrith-s/concurrent-tasks/blob/master/LICENSE) for more info. | ||
Copyright © 2018. | ||
[website]: https://concurrent-tasks.js.org | ||
[icon]: https://raw.githubusercontent.com/samrith-s/concurrent-tasks/master/icons/icon-x64.png | ||
[size]: https://bundlephobia.com/result?p=concurrent-tasks | ||
[size_img]: https://badgen.net/bundlephobia/minzip/concurrent-tasks | ||
[npm_package]: https://www.npmjs.com/package/concurrent-tasks | ||
@@ -17,0 +264,0 @@ [npm_v]: https://img.shields.io/npm/v/concurrent-tasks.svg |
/*! | ||
* concurrent-tasks v1.0.0 - https://concurrent-tasks.js.org | ||
* concurrent-tasks v1.0.1 - https://concurrent-tasks.js.org | ||
* MIT Licensed | ||
@@ -4,0 +4,0 @@ */ |
/*! | ||
* concurrent-tasks v1.0.0 - https://concurrent-tasks.js.org | ||
* concurrent-tasks v1.0.1 - https://concurrent-tasks.js.org | ||
* MIT Licensed | ||
@@ -4,0 +4,0 @@ */ |
71026
14
271