2.0.0 • Published 7 months ago

bulk-processor v2.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

Bulk Processor

A simple and efficient bulk processor with size and timeout control, powered by lodash's throttle function. This package helps you process items in batches, improving performance and reducing the load on resources when dealing with large datasets or asynchronous operations.

Features

  • Batching: Groups items into batches of a configurable size.
  • Throttling: Executes batches with a configurable time interval to avoid overloading resources.
  • Asynchronous: Supports asynchronous processing of batches.
  • Flexible: Highly customizable for various use cases.
  • Simple API: Easy to integrate into your projects.

Installation

Install the package using npm:

npm install bulk-processor

Usage

Here's a simple example of how to use the bulk processor:

const { BulkProcessor } = require('bulk-processor');

// Example batch processing function
async function processBatch(batch) {
  console.log('Processing batch:', batch);
  // Simulate some asynchronous work
  await new Promise((resolve) => setTimeout(resolve, 100));
}

// Create a bulk processor with a batch size of 5 and a 500ms timeout
const processor = BulkProcessor(5, 500, processBatch);

// Push some items into the batch
for (let i = 0; i < 20; i++) {
  processor.push(i);
}

// Flush remaining items and log the total processed count after 1 second
setTimeout(async () => {
  await processor.flush();
}, 1000);

API

BulkProcessor(size, timeout, batchFunc)

Creates a new bulk processor instance.

  • size: number - The maximum size of a batch.
  • timeout: number - The minimum time interval in milliseconds between batch executions.
  • batchFunc: async function - The function to call with each batch. This function receives the batch as a single argument (an array of items).

push(item)

Adds an item to the current batch. If the batch reaches the maximum size, it will be flushed, or if a timeout expires, it also will be flushed.

  • item: any - The item to add to the batch.

flush()

Forces the current batch to be processed immediately. If you don't call flush() manually, the final batch might not be processed. This method returns a Promise which resolves when the batch is processed.

  • Returns: Promise

Examples

Basic Usage

This example shows the basic usage of the processor with the default configuration.

const { BulkProcessor } = require('bulk-processor');

async function processBatch(batch) {
  console.log('Processing batch:', batch);
  await new Promise((resolve) => setTimeout(resolve, 100));
}

const processor = BulkProcessor(3, 200, processBatch);

for (let i = 0; i < 10; i++) {
  processor.push(i);
}

Using Different Batch Sizes and Timeouts

This example demonstrates how to customize the batch size and timeout.

const { BulkProcessor } = require('bulk-processor');

async function processBatch(batch) {
  console.log('Processing batch:', batch);
  await new Promise((resolve) => setTimeout(resolve, 50));
}

const processor = BulkProcessor(10, 1000, processBatch); // Batch size 10, timeout 1 second

for (let i = 0; i < 30; i++) {
  processor.push(i);
}

// If you want to flush immediately even when there is data in batch
setTimeout(async () => {
  await processor.flush();
}, 1000);

Contributing

Contributions are welcome! Feel free to submit issues and pull requests.

License

This project is licensed under the MIT License.

Changelog

v1.0.0

  • Initial Release