batch-tasks
Advanced tools
+2
-1
@@ -7,3 +7,4 @@ interface Batch<T> { | ||
| constructor(generator: () => Generator<Batch<T>>); | ||
| static fromArray<T>(items: T[], batchSize: number): BatchTasks<T>; | ||
| static fromArrayAndSize<T>(items: T[], batchSize: number): BatchTasks<T>; | ||
| static fromArrayAndDuration<T>(items: T[], batchDuration: number): BatchTasks<T>; | ||
| batches(): Generator<Batch<T>, any, unknown>; | ||
@@ -10,0 +11,0 @@ } |
+30
-1
@@ -24,2 +24,22 @@ "use strict"; | ||
| } | ||
| class DurationBatch { | ||
| constructor(items, start, duration) { | ||
| this.items = items; | ||
| this.duration = duration; | ||
| this._start = start; | ||
| this._end = start; | ||
| } | ||
| run(action) { | ||
| let index = this._start; | ||
| const start = Date.now(); // TODO: should use performance.now() but in a browser+NodeJS friendly way. | ||
| while (Date.now() < start + this.duration && index < this.items.length) { | ||
| action(this.items[index], index); | ||
| index += 1; | ||
| } | ||
| this._end = index; | ||
| } | ||
| get end() { | ||
| return this._end; | ||
| } | ||
| } | ||
| class BatchTasks { | ||
@@ -29,3 +49,3 @@ constructor(generator) { | ||
| } | ||
| static fromArray(items, batchSize) { | ||
| static fromArrayAndSize(items, batchSize) { | ||
| return new BatchTasks(function* () { | ||
@@ -39,2 +59,11 @@ for (let i = 0; i < items.length; i += batchSize) { | ||
| } | ||
| static fromArrayAndDuration(items, batchDuration) { | ||
| return new BatchTasks(function* () { | ||
| let lastBatch = null; | ||
| while (lastBatch === null || lastBatch.end < items.length) { | ||
| lastBatch = new DurationBatch(items, lastBatch === null ? 0 : lastBatch.end, batchDuration); | ||
| yield lastBatch; | ||
| } | ||
| }); | ||
| } | ||
| batches() { | ||
@@ -41,0 +70,0 @@ return this._generator(); |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAIA,MAAM,UAAU;IAKZ,YAAmB,KAAU,EAAE,KAAa,EAAE,GAAW;QACrD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC;IAEM,GAAG,CAAC,MAAwC;QAC/C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC5B;IACL,CAAC;CACJ;AAED,MAAa,UAAU;IAGnB,YAAmB,SAAoC;QACnD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAChC,CAAC;IAEM,MAAM,CAAC,SAAS,CAAI,KAAU,EAAE,SAAiB;QACpD,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE;gBAC9C,MAAM,KAAK,GAAG,CAAC,CAAC;gBAChB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAClD,MAAM,IAAI,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;aAC3C;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;CACJ;AApBD,gCAoBC;AAED,MAAa,UAAU;IACZ,MAAM,CAAO,aAAa,CAAI,OAA4B,EAAE,MAAiC,EAAE,WAAwB;;YAC1H,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;gBACzB,IAAI,WAAW,CAAC,OAAO,EAAE;oBACrB,MAAM;iBACT;gBACD,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;aAC1D;QACL,CAAC;KAAA;IAEM,MAAM,CAAO,WAAW,CAAI,OAA4B,EAAE,MAAwC,EAAE,WAAwB;;YAC/H,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;gBACzB,IAAI,WAAW,CAAC,OAAO,EAAE;oBACrB,MAAM;iBACT;gBACD,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAClB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;aAC1D;QACL,CAAC;KAAA;CACJ;AApBD,gCAoBC"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} |
+1
-1
| { | ||
| "name": "batch-tasks", | ||
| "version": "0.1.1", | ||
| "version": "0.1.2", | ||
| "description": "Batch CPU bound tasks", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
+39
-1
@@ -23,2 +23,30 @@ interface Batch<T> { | ||
| class DurationBatch<T> implements Batch<T> { | ||
| public readonly items: T[]; | ||
| public readonly duration: number; | ||
| private _start: number; | ||
| private _end: number; | ||
| public constructor(items: T[], start: number, duration: number) { | ||
| this.items = items; | ||
| this.duration = duration; | ||
| this._start = start; | ||
| this._end = start; | ||
| } | ||
| public run(action: (item: T, index: number) => void) { | ||
| let index = this._start; | ||
| const start = Date.now(); // TODO: should use performance.now() but in a browser+NodeJS friendly way. | ||
| while (Date.now() < start + this.duration && index < this.items.length) { | ||
| action(this.items[index], index); | ||
| index += 1; | ||
| } | ||
| this._end = index; | ||
| } | ||
| public get end() { | ||
| return this._end; | ||
| } | ||
| } | ||
| export class BatchTasks<T> { | ||
@@ -31,3 +59,3 @@ private _generator: () => Generator<Batch<T>>; | ||
| public static fromArray<T>(items: T[], batchSize: number) { | ||
| public static fromArrayAndSize<T>(items: T[], batchSize: number) { | ||
| return new BatchTasks(function* () { | ||
@@ -42,2 +70,12 @@ for (let i = 0; i < items.length; i += batchSize) { | ||
| public static fromArrayAndDuration<T>(items: T[], batchDuration: number) { | ||
| return new BatchTasks(function* () { | ||
| let lastBatch: DurationBatch<T> | null = null; | ||
| while (lastBatch === null || lastBatch.end < items.length) { | ||
| lastBatch = new DurationBatch(items, lastBatch === null ? 0 : lastBatch.end, batchDuration); | ||
| yield lastBatch; | ||
| } | ||
| }); | ||
| } | ||
| public batches() { | ||
@@ -44,0 +82,0 @@ return this._generator(); |
Sorry, the diff of this file is not supported yet
84061
4.18%220
40.13%