performance-helpers 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -2
- package/package.json +146 -1
- package/src/index.js +1 -0
- package/.eslintrc.cjs +0 -22
- package/.nojekyll +0 -0
- package/.prettierrc +0 -6
- package/CONTRIBUTING.md +0 -178
- package/assets/1_Caching.md +0 -4
- package/assets/2_Parallelizing.md +0 -18
- package/assets/3_Logging.md +0 -3
- package/assets/404.md +0 -3
- package/assets/4_Utils.md +0 -10
- package/assets/logo.png +0 -0
- package/assets/navigation.md +0 -10
- package/bench/README.md +0 -97
- package/bench/results.json +0 -94
- package/bench/results.md +0 -233
- package/bench/run.js +0 -2639
- package/bench/worker.js +0 -43
- package/docs/README.md +0 -38
- package/docs/docs-typedoc.json +0 -38714
- package/docs/helpers/constants/README.md +0 -34
- package/docs/helpers/constants/variables/DEFAULT_AUTOSCALE_BACKOFF_MAX_MULTIPLIER.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_AUTOSCALE_COOLDOWN_MS.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_AUTOSCALE_INTERVAL_MS.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_AUTOSCALE_MIN_INTERVAL_MS.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_BACKPRESSURE_QUEUE_CAPACITY.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_BACKPRESSURE_REFILL_INTERVAL_MS.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_BATCH_MAX_SIZE.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_CACHE_DEFAULT_TTL_MS.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_CACHE_MAX_POOL_SIZE.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_CACHE_MAX_WEIGHT_BYTES.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_HISTOGRAM_BUCKET_COUNT.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_HISTOGRAM_MAX_VALUE.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_MAX_CLEANUP_PER_TICK.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_QUEUE_CAPACITY.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_REAPER_MIN_INTERVAL_MS.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_REFILL_INTERVAL_MS.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_RETRY_BASE_DELAY_MS.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_RETRY_MAX_DELAY_MS.md +0 -9
- package/docs/helpers/constants/variables/DEFAULT_TIMEOUT_MS.md +0 -9
- package/docs/helpers/constants/variables/ENCODE_CACHE_LARGE_KEY_LENGTH.md +0 -9
- package/docs/helpers/constants/variables/MAX_DEEP_EQUAL_DEPTH.md +0 -9
- package/docs/helpers/constants/variables/MS_PER_MIN.md +0 -9
- package/docs/helpers/constants/variables/MS_PER_SEC.md +0 -9
- package/docs/helpers/constants/variables/default.md +0 -103
- package/docs/helpers/jsdoc-types/README.md +0 -33
- package/docs/helpers/jsdoc-types/interfaces/BufferDecoder.md +0 -23
- package/docs/helpers/jsdoc-types/interfaces/BufferEncoder.md +0 -23
- package/docs/helpers/jsdoc-types/interfaces/CacheNode.md +0 -43
- package/docs/helpers/jsdoc-types/interfaces/CommonPoolOptions.md +0 -31
- package/docs/helpers/jsdoc-types/interfaces/PendingResponseEntry.md +0 -51
- package/docs/helpers/jsdoc-types/interfaces/PostMessageOptions.md +0 -39
- package/docs/helpers/jsdoc-types/interfaces/PowerBatchOptions.md +0 -13
- package/docs/helpers/jsdoc-types/interfaces/PowerCacheOptions.md +0 -115
- package/docs/helpers/jsdoc-types/interfaces/PowerChunkingOptions.md +0 -31
- package/docs/helpers/jsdoc-types/interfaces/PowerCircuitOptions.md +0 -45
- package/docs/helpers/jsdoc-types/interfaces/PowerDeadlineOptions.md +0 -101
- package/docs/helpers/jsdoc-types/interfaces/PowerDeferOptions.md +0 -13
- package/docs/helpers/jsdoc-types/interfaces/PowerEventBusOptions.md +0 -19
- package/docs/helpers/jsdoc-types/interfaces/PowerLatchOptions.md +0 -23
- package/docs/helpers/jsdoc-types/interfaces/PowerLoggerOptions.md +0 -51
- package/docs/helpers/jsdoc-types/interfaces/PowerObserverOptions.md +0 -25
- package/docs/helpers/jsdoc-types/interfaces/PowerPoolOptions.md +0 -85
- package/docs/helpers/jsdoc-types/interfaces/PowerQueueOptions.md +0 -13
- package/docs/helpers/jsdoc-types/interfaces/PowerRetryOptions.md +0 -83
- package/docs/helpers/jsdoc-types/interfaces/PowerSlidingWindowOptions.md +0 -19
- package/docs/helpers/jsdoc-types/interfaces/PowerTTLMapOptions.md +0 -27
- package/docs/helpers/jsdoc-types/interfaces/PowerThrottleOptions.md +0 -31
- package/docs/helpers/jsdoc-types/interfaces/WorkerObj.md +0 -55
- package/docs/helpers/powerBackpressure/README.md +0 -17
- package/docs/helpers/powerBackpressure/classes/PowerBackpressure.md +0 -368
- package/docs/helpers/powerBatch/README.md +0 -17
- package/docs/helpers/powerBatch/classes/PowerBatch.md +0 -139
- package/docs/helpers/powerBuffer/README.md +0 -26
- package/docs/helpers/powerBuffer/functions/b2o.md +0 -25
- package/docs/helpers/powerBuffer/functions/o2b.md +0 -23
- package/docs/helpers/powerBuffer/functions/o2u8.md +0 -33
- package/docs/helpers/powerBuffer/functions/u82o.md +0 -30
- package/docs/helpers/powerBulkhead/README.md +0 -17
- package/docs/helpers/powerBulkhead/classes/PowerBulkhead.md +0 -302
- package/docs/helpers/powerCache/README.md +0 -29
- package/docs/helpers/powerCache/classes/PowerCache.md +0 -933
- package/docs/helpers/powerCache/classes/PowerMemoizer.md +0 -244
- package/docs/helpers/powerCache/classes/PowerTimedCache.md +0 -302
- package/docs/helpers/powerCache/functions/simpleArgsKey.md +0 -31
- package/docs/helpers/powerChunking/README.md +0 -17
- package/docs/helpers/powerChunking/classes/PowerChunker.md +0 -78
- package/docs/helpers/powerCircuit/README.md +0 -23
- package/docs/helpers/powerCircuit/classes/PowerCircuit.md +0 -167
- package/docs/helpers/powerDeadline/README.md +0 -23
- package/docs/helpers/powerDeadline/classes/PowerDeadline.md +0 -88
- package/docs/helpers/powerDefer/README.md +0 -17
- package/docs/helpers/powerDefer/classes/PowerDefer.md +0 -134
- package/docs/helpers/powerEventBus/README.md +0 -23
- package/docs/helpers/powerEventBus/classes/PowerEventBus.md +0 -330
- package/docs/helpers/powerHistogram/README.md +0 -17
- package/docs/helpers/powerHistogram/classes/PowerHistogram.md +0 -285
- package/docs/helpers/powerLatch/README.md +0 -17
- package/docs/helpers/powerLatch/classes/PowerLatch.md +0 -264
- package/docs/helpers/powerLogger/README.md +0 -17
- package/docs/helpers/powerLogger/classes/PowerLogger.md +0 -290
- package/docs/helpers/powerObserver/README.md +0 -23
- package/docs/helpers/powerObserver/classes/PowerObserver.md +0 -213
- package/docs/helpers/powerPermitGate/README.md +0 -11
- package/docs/helpers/powerPermitGate/classes/PowerPermitGate.md +0 -248
- package/docs/helpers/powerPool/README.md +0 -36
- package/docs/helpers/powerPool/classes/PowerPool.md +0 -973
- package/docs/helpers/powerPool/classes/PowerPoolShutdownError.md +0 -67
- package/docs/helpers/powerQueue/README.md +0 -11
- package/docs/helpers/powerQueue/classes/PowerQueue.md +0 -302
- package/docs/helpers/powerRateLimit/README.md +0 -17
- package/docs/helpers/powerRateLimit/classes/PowerRateLimit.md +0 -187
- package/docs/helpers/powerRetry/README.md +0 -23
- package/docs/helpers/powerRetry/classes/PowerRetry.md +0 -106
- package/docs/helpers/powerScheduler/README.md +0 -11
- package/docs/helpers/powerScheduler/classes/PowerScheduler.md +0 -135
- package/docs/helpers/powerSemaphore/README.md +0 -17
- package/docs/helpers/powerSemaphore/classes/PowerSemaphore.md +0 -173
- package/docs/helpers/powerSlidingWindow/README.md +0 -11
- package/docs/helpers/powerSlidingWindow/classes/PowerSlidingWindow.md +0 -83
- package/docs/helpers/powerSubscriberSet/README.md +0 -15
- package/docs/helpers/powerSubscriberSet/classes/PowerSubscriberSet.md +0 -251
- package/docs/helpers/powerSubscriberSet/functions/cleanupWeakRefs.md +0 -21
- package/docs/helpers/powerTTLMap/README.md +0 -17
- package/docs/helpers/powerTTLMap/classes/PowerTTLMap.md +0 -326
- package/docs/helpers/powerThrottle/README.md +0 -17
- package/docs/helpers/powerThrottle/classes/PowerThrottle.md +0 -216
- package/docs/index/README.md +0 -205
- package/docs/utils/errors/README.md +0 -12
- package/docs/utils/errors/functions/formatErrorObj.md +0 -30
- package/docs/utils/errors/functions/normalizeError.md +0 -50
- package/docs/utils/now/README.md +0 -19
- package/docs/utils/now/functions/measureAsync.md +0 -37
- package/docs/utils/now/functions/measureSync.md +0 -54
- package/docs/utils/now/functions/nowMs.md +0 -24
- package/guides/autoscale.md +0 -80
- package/guides/errors.md +0 -41
- package/guides/metaGuide.md +0 -440
- package/guides/now.md +0 -56
- package/guides/powerBackpressure.md +0 -110
- package/guides/powerBatch.md +0 -82
- package/guides/powerBuffer.md +0 -86
- package/guides/powerBulkhead.md +0 -61
- package/guides/powerCache.md +0 -269
- package/guides/powerChunking.md +0 -130
- package/guides/powerCircuit.md +0 -84
- package/guides/powerDeadline.md +0 -99
- package/guides/powerDefer.md +0 -56
- package/guides/powerEventBus.md +0 -89
- package/guides/powerHistogram.md +0 -71
- package/guides/powerLatch.md +0 -94
- package/guides/powerLogger.md +0 -129
- package/guides/powerObserver.md +0 -65
- package/guides/powerPermitGate.md +0 -52
- package/guides/powerPool.md +0 -321
- package/guides/powerQueue.md +0 -112
- package/guides/powerRateLimit.md +0 -37
- package/guides/powerRetry.md +0 -54
- package/guides/powerScheduler.md +0 -41
- package/guides/powerSemaphore.md +0 -65
- package/guides/powerSlidingWindow.md +0 -63
- package/guides/powerSubscriberSet.md +0 -48
- package/guides/powerTTLMap.md +0 -58
- package/guides/powerThrottle.md +0 -152
- package/index.html +0 -57
- package/results.json +0 -6692
- package/scripts/find-missing-jsdoc.js +0 -62
- package/scripts/modernize-optional-chaining.cjs +0 -36
- package/scripts/pool-debug.mjs +0 -29
- package/scripts/repro_powercache.js +0 -14
- package/scripts/static-audit-exports.cjs +0 -93
- package/scripts/static-audit-exports.json +0 -518
- package/test/powerBackpressure.test.js +0 -114
- package/test/powerBatch.branches.extra.test.js +0 -122
- package/test/powerBatch.test.js +0 -79
- package/test/powerBuffer.test.js +0 -125
- package/test/powerBulkhead.test.js +0 -210
- package/test/powerCache.branches.test.js +0 -233
- package/test/powerCache.bulk.test.js +0 -31
- package/test/powerCache.getorset.test.js +0 -110
- package/test/powerCache.hitRate.test.js +0 -35
- package/test/powerCache.inflight.test.js +0 -24
- package/test/powerCache.iterator.test.js +0 -18
- package/test/powerCache.misses.test.js +0 -52
- package/test/powerCache.more.test.js +0 -118
- package/test/powerCache.test.js +0 -37
- package/test/powerCache.timeout.test.js +0 -25
- package/test/powerCache.touch.test.js +0 -46
- package/test/powerChunking.branches.extra.test.js +0 -155
- package/test/powerChunking.errors.test.js +0 -177
- package/test/powerChunking.test.js +0 -39
- package/test/powerCircuit.observability.test.js +0 -71
- package/test/powerCircuit.test.js +0 -74
- package/test/powerDeadline.test.js +0 -140
- package/test/powerDefer.test.js +0 -55
- package/test/powerErrors.test.js +0 -32
- package/test/powerEventBus.branches.extra.test.js +0 -70
- package/test/powerEventBus.extra.test.js +0 -72
- package/test/powerEventBus.max.test.js +0 -43
- package/test/powerEventBus.more.test.js +0 -121
- package/test/powerEventBus.once_off.test.js +0 -17
- package/test/powerEventBus.test.js +0 -74
- package/test/powerEventBus.uncovered.test.js +0 -57
- package/test/powerEventBus.weak.test.js +0 -18
- package/test/powerHistogram.test.js +0 -73
- package/test/powerLatch.branches.extra.test.js +0 -115
- package/test/powerLatch.test.js +0 -57
- package/test/powerLogger.branches.test.js +0 -98
- package/test/powerLogger.formatter.name.test.js +0 -58
- package/test/powerLogger.json.test.js +0 -88
- package/test/powerLogger.output.test.js +0 -81
- package/test/powerLogger.table.debug.test.js +0 -77
- package/test/powerLogger.test.js +0 -59
- package/test/powerMemoizer.memoize.test.js +0 -100
- package/test/powerMemoizer.test.js +0 -85
- package/test/powerObserver.test.js +0 -129
- package/test/powerPermitGate.test.js +0 -66
- package/test/powerPool.autoTransfer.test.js +0 -100
- package/test/powerPool.autoscale.extra.test.js +0 -88
- package/test/powerPool.autoscale.test.js +0 -136
- package/test/powerPool.awaitDefaultTimeout.test.js +0 -52
- package/test/powerPool.awaitTimeout.test.js +0 -22
- package/test/powerPool.batch.test.js +0 -170
- package/test/powerPool.branches.extra2.test.js +0 -42
- package/test/powerPool.branches.test.js +0 -102
- package/test/powerPool.browser.messageerror.test.js +0 -45
- package/test/powerPool.correlation.test.js +0 -26
- package/test/powerPool.correlationId.test.js +0 -63
- package/test/powerPool.dispose.test.js +0 -49
- package/test/powerPool.drain.test.js +0 -57
- package/test/powerPool.events.test.js +0 -131
- package/test/powerPool.more.extra.test.js +0 -99
- package/test/powerPool.more.test.js +0 -283
- package/test/powerPool.node.messageerror.test.js +0 -46
- package/test/powerPool.postMessage.promise.test.js +0 -83
- package/test/powerPool.queueHigh.test.js +0 -55
- package/test/powerPool.queueSaturation.test.js +0 -51
- package/test/powerPool.rapidResize.test.js +0 -55
- package/test/powerPool.resize.overload.test.js +0 -65
- package/test/powerPool.resize.test.js +0 -70
- package/test/powerPool.shutdown.test.js +0 -38
- package/test/powerPool.stats.test.js +0 -40
- package/test/powerPool.stopThePress.test.js +0 -94
- package/test/powerPool.terminateShutdown.test.js +0 -22
- package/test/powerPool.test.js +0 -525
- package/test/powerPool.timers.test.js +0 -55
- package/test/powerPool.uncovered.test.js +0 -407
- package/test/powerPool.workerId.test.js +0 -47
- package/test/powerQueue.iterators.test.js +0 -67
- package/test/powerQueue.saturation.test.js +0 -18
- package/test/powerQueue.test.js +0 -48
- package/test/powerQueue.unshiftMany.test.js +0 -49
- package/test/powerRateLimit.atomic.test.js +0 -80
- package/test/powerRateLimit.extra.test.js +0 -145
- package/test/powerRateLimit.functions.test.js +0 -106
- package/test/powerRateLimit.test.js +0 -38
- package/test/powerRetry.attemptTimeout.test.js +0 -51
- package/test/powerRetry.test.js +0 -121
- package/test/powerScheduler.test.js +0 -126
- package/test/powerSemaphore.test.js +0 -108
- package/test/powerSlidingWindow.pool.test.js +0 -55
- package/test/powerSlidingWindow.test.js +0 -25
- package/test/powerSubscriberSet.test.js +0 -125
- package/test/powerTTLMap.test.js +0 -125
- package/test/powerThrottle.pool.test.js +0 -54
- package/test/powerThrottle.refill.test.js +0 -22
- package/test/powerThrottle.reserve.test.js +0 -46
- package/test/powerThrottle.test.js +0 -45
- package/test/powerTimedCache.test.js +0 -73
- package/test/umd.bundle.branches.test.js +0 -100
- package/test/umd.bundle.cache-timers.test.js +0 -48
- package/test/umd.bundle.exhaustive.test.js +0 -158
- package/test/umd.bundle.fuzz.test.js +0 -86
- package/test/umd.bundle.hasEqual.more.test.js +0 -68
- package/test/umd.bundle.hasEqual.test.js +0 -104
- package/test/umd.bundle.logger-extra.test.js +0 -48
- package/test/umd.bundle.more-coverage-2.test.js +0 -67
- package/test/umd.bundle.pool.test.js +0 -134
- package/test/umd.bundle.test.js +0 -265
- package/test/utils.measure.test.js +0 -49
- package/test/utils.now.extra.test.js +0 -30
- package/test/utils.now.more.test.js +0 -57
- package/tsconfig.json +0 -16
- package/typedoc.json +0 -25
- package/vite.config.js +0 -31
- package/vitest.config.js +0 -17
package/README.md
CHANGED
|
@@ -111,7 +111,7 @@ npm run docs
|
|
|
111
111
|
|
|
112
112
|
## Usage examples
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
Import everything from the package entry:
|
|
115
115
|
|
|
116
116
|
```javascript
|
|
117
117
|
import {
|
|
@@ -147,6 +147,16 @@ import {
|
|
|
147
147
|
} from 'performance-helpers';
|
|
148
148
|
```
|
|
149
149
|
|
|
150
|
+
Import a single helper or utility when you want the smallest possible bundle:
|
|
151
|
+
|
|
152
|
+
```javascript
|
|
153
|
+
import { PowerCache } from 'performance-helpers/powerCache';
|
|
154
|
+
import { nowMs } from 'performance-helpers/now';
|
|
155
|
+
import { normalizeError } from 'performance-helpers/errors';
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
The package is marked as side-effect free, so bundlers can treeshake unused exports from the root entry as well.
|
|
159
|
+
|
|
150
160
|
## CDN usage
|
|
151
161
|
|
|
152
162
|
You can import the package directly from a CDN for quick demos. Example using unpkg (ES module support):
|
|
@@ -187,7 +197,7 @@ UMD example (script tag):
|
|
|
187
197
|
|
|
188
198
|
## API docs
|
|
189
199
|
|
|
190
|
-
|
|
200
|
+
See the [full API documentation](docs/README.md)
|
|
191
201
|
|
|
192
202
|
## License
|
|
193
203
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "performance-helpers",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Performance toolbox",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"node",
|
|
@@ -38,13 +38,158 @@
|
|
|
38
38
|
"author": "Abel Vázquez Montoro",
|
|
39
39
|
"type": "module",
|
|
40
40
|
"main": "src/index.js",
|
|
41
|
+
"module": "src/index.js",
|
|
41
42
|
"types": "types/index.d.ts",
|
|
43
|
+
"files": [
|
|
44
|
+
"src",
|
|
45
|
+
"types",
|
|
46
|
+
"README.md",
|
|
47
|
+
"LICENSE.md",
|
|
48
|
+
"package.json"
|
|
49
|
+
],
|
|
50
|
+
"sideEffects": false,
|
|
42
51
|
"exports": {
|
|
43
52
|
".": {
|
|
53
|
+
"types": "./types/index.d.ts",
|
|
44
54
|
"import": "./src/index.js",
|
|
45
55
|
"require": "./src/index.js",
|
|
46
56
|
"default": "./src/index.js"
|
|
47
57
|
},
|
|
58
|
+
"./powerBackpressure": {
|
|
59
|
+
"types": "./types/helpers/powerBackpressure.d.ts",
|
|
60
|
+
"import": "./src/helpers/powerBackpressure.js",
|
|
61
|
+
"default": "./src/helpers/powerBackpressure.js"
|
|
62
|
+
},
|
|
63
|
+
"./powerBatch": {
|
|
64
|
+
"types": "./types/helpers/powerBatch.d.ts",
|
|
65
|
+
"import": "./src/helpers/powerBatch.js",
|
|
66
|
+
"default": "./src/helpers/powerBatch.js"
|
|
67
|
+
},
|
|
68
|
+
"./powerBuffer": {
|
|
69
|
+
"types": "./types/helpers/powerBuffer.d.ts",
|
|
70
|
+
"import": "./src/helpers/powerBuffer.js",
|
|
71
|
+
"default": "./src/helpers/powerBuffer.js"
|
|
72
|
+
},
|
|
73
|
+
"./powerBulkhead": {
|
|
74
|
+
"types": "./types/helpers/powerBulkhead.d.ts",
|
|
75
|
+
"import": "./src/helpers/powerBulkhead.js",
|
|
76
|
+
"default": "./src/helpers/powerBulkhead.js"
|
|
77
|
+
},
|
|
78
|
+
"./powerCache": {
|
|
79
|
+
"types": "./types/helpers/powerCache.d.ts",
|
|
80
|
+
"import": "./src/helpers/powerCache.js",
|
|
81
|
+
"default": "./src/helpers/powerCache.js"
|
|
82
|
+
},
|
|
83
|
+
"./powerChunking": {
|
|
84
|
+
"types": "./types/helpers/powerChunking.d.ts",
|
|
85
|
+
"import": "./src/helpers/powerChunking.js",
|
|
86
|
+
"default": "./src/helpers/powerChunking.js"
|
|
87
|
+
},
|
|
88
|
+
"./powerCircuit": {
|
|
89
|
+
"types": "./types/helpers/powerCircuit.d.ts",
|
|
90
|
+
"import": "./src/helpers/powerCircuit.js",
|
|
91
|
+
"default": "./src/helpers/powerCircuit.js"
|
|
92
|
+
},
|
|
93
|
+
"./powerDeadline": {
|
|
94
|
+
"types": "./types/helpers/powerDeadline.d.ts",
|
|
95
|
+
"import": "./src/helpers/powerDeadline.js",
|
|
96
|
+
"default": "./src/helpers/powerDeadline.js"
|
|
97
|
+
},
|
|
98
|
+
"./powerDefer": {
|
|
99
|
+
"types": "./types/helpers/powerDefer.d.ts",
|
|
100
|
+
"import": "./src/helpers/powerDefer.js",
|
|
101
|
+
"default": "./src/helpers/powerDefer.js"
|
|
102
|
+
},
|
|
103
|
+
"./powerEventBus": {
|
|
104
|
+
"types": "./types/helpers/powerEventBus.d.ts",
|
|
105
|
+
"import": "./src/helpers/powerEventBus.js",
|
|
106
|
+
"default": "./src/helpers/powerEventBus.js"
|
|
107
|
+
},
|
|
108
|
+
"./powerHistogram": {
|
|
109
|
+
"types": "./types/helpers/powerHistogram.d.ts",
|
|
110
|
+
"import": "./src/helpers/powerHistogram.js",
|
|
111
|
+
"default": "./src/helpers/powerHistogram.js"
|
|
112
|
+
},
|
|
113
|
+
"./powerLatch": {
|
|
114
|
+
"types": "./types/helpers/powerLatch.d.ts",
|
|
115
|
+
"import": "./src/helpers/powerLatch.js",
|
|
116
|
+
"default": "./src/helpers/powerLatch.js"
|
|
117
|
+
},
|
|
118
|
+
"./powerLogger": {
|
|
119
|
+
"types": "./types/helpers/powerLogger.d.ts",
|
|
120
|
+
"import": "./src/helpers/powerLogger.js",
|
|
121
|
+
"default": "./src/helpers/powerLogger.js"
|
|
122
|
+
},
|
|
123
|
+
"./powerObserver": {
|
|
124
|
+
"types": "./types/helpers/powerObserver.d.ts",
|
|
125
|
+
"import": "./src/helpers/powerObserver.js",
|
|
126
|
+
"default": "./src/helpers/powerObserver.js"
|
|
127
|
+
},
|
|
128
|
+
"./powerPermitGate": {
|
|
129
|
+
"types": "./types/helpers/powerPermitGate.d.ts",
|
|
130
|
+
"import": "./src/helpers/powerPermitGate.js",
|
|
131
|
+
"default": "./src/helpers/powerPermitGate.js"
|
|
132
|
+
},
|
|
133
|
+
"./powerPool": {
|
|
134
|
+
"types": "./types/helpers/powerPool.d.ts",
|
|
135
|
+
"import": "./src/helpers/powerPool.js",
|
|
136
|
+
"default": "./src/helpers/powerPool.js"
|
|
137
|
+
},
|
|
138
|
+
"./powerQueue": {
|
|
139
|
+
"types": "./types/helpers/powerQueue.d.ts",
|
|
140
|
+
"import": "./src/helpers/powerQueue.js",
|
|
141
|
+
"default": "./src/helpers/powerQueue.js"
|
|
142
|
+
},
|
|
143
|
+
"./powerRateLimit": {
|
|
144
|
+
"types": "./types/helpers/powerRateLimit.d.ts",
|
|
145
|
+
"import": "./src/helpers/powerRateLimit.js",
|
|
146
|
+
"default": "./src/helpers/powerRateLimit.js"
|
|
147
|
+
},
|
|
148
|
+
"./powerRetry": {
|
|
149
|
+
"types": "./types/helpers/powerRetry.d.ts",
|
|
150
|
+
"import": "./src/helpers/powerRetry.js",
|
|
151
|
+
"default": "./src/helpers/powerRetry.js"
|
|
152
|
+
},
|
|
153
|
+
"./powerScheduler": {
|
|
154
|
+
"types": "./types/helpers/powerScheduler.d.ts",
|
|
155
|
+
"import": "./src/helpers/powerScheduler.js",
|
|
156
|
+
"default": "./src/helpers/powerScheduler.js"
|
|
157
|
+
},
|
|
158
|
+
"./powerSemaphore": {
|
|
159
|
+
"types": "./types/helpers/powerSemaphore.d.ts",
|
|
160
|
+
"import": "./src/helpers/powerSemaphore.js",
|
|
161
|
+
"default": "./src/helpers/powerSemaphore.js"
|
|
162
|
+
},
|
|
163
|
+
"./powerSlidingWindow": {
|
|
164
|
+
"types": "./types/helpers/powerSlidingWindow.d.ts",
|
|
165
|
+
"import": "./src/helpers/powerSlidingWindow.js",
|
|
166
|
+
"default": "./src/helpers/powerSlidingWindow.js"
|
|
167
|
+
},
|
|
168
|
+
"./powerSubscriberSet": {
|
|
169
|
+
"types": "./types/helpers/powerSubscriberSet.d.ts",
|
|
170
|
+
"import": "./src/helpers/powerSubscriberSet.js",
|
|
171
|
+
"default": "./src/helpers/powerSubscriberSet.js"
|
|
172
|
+
},
|
|
173
|
+
"./powerThrottle": {
|
|
174
|
+
"types": "./types/helpers/powerThrottle.d.ts",
|
|
175
|
+
"import": "./src/helpers/powerThrottle.js",
|
|
176
|
+
"default": "./src/helpers/powerThrottle.js"
|
|
177
|
+
},
|
|
178
|
+
"./powerTTLMap": {
|
|
179
|
+
"types": "./types/helpers/powerTTLMap.d.ts",
|
|
180
|
+
"import": "./src/helpers/powerTTLMap.js",
|
|
181
|
+
"default": "./src/helpers/powerTTLMap.js"
|
|
182
|
+
},
|
|
183
|
+
"./now": {
|
|
184
|
+
"types": "./types/utils/now.d.ts",
|
|
185
|
+
"import": "./src/utils/now.js",
|
|
186
|
+
"default": "./src/utils/now.js"
|
|
187
|
+
},
|
|
188
|
+
"./errors": {
|
|
189
|
+
"types": "./types/utils/errors.d.ts",
|
|
190
|
+
"import": "./src/utils/errors.js",
|
|
191
|
+
"default": "./src/utils/errors.js"
|
|
192
|
+
},
|
|
48
193
|
"./package.json": "./package.json"
|
|
49
194
|
},
|
|
50
195
|
"scripts": {
|
package/src/index.js
CHANGED
|
@@ -14,6 +14,7 @@ export { PowerSubscriberSet } from './helpers/powerSubscriberSet.js';
|
|
|
14
14
|
export { PowerSemaphore } from './helpers/powerSemaphore.js';
|
|
15
15
|
export { PowerDefer } from './helpers/powerDefer.js';
|
|
16
16
|
export { PowerTTLMap } from './helpers/powerTTLMap.js';
|
|
17
|
+
export { normalizeError, formatErrorObj } from './utils/errors.js';
|
|
17
18
|
export { nowMs, measureSync, measureAsync } from './utils/now.js';
|
|
18
19
|
export { PowerCircuit } from './helpers/powerCircuit.js';
|
|
19
20
|
export { PowerRetry } from './helpers/powerRetry.js';
|
package/.eslintrc.cjs
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
module.exports = {
|
|
2
|
-
env: {
|
|
3
|
-
es2021: true,
|
|
4
|
-
node: true,
|
|
5
|
-
browser: true,
|
|
6
|
-
},
|
|
7
|
-
parserOptions: {
|
|
8
|
-
ecmaVersion: 2021,
|
|
9
|
-
sourceType: 'module',
|
|
10
|
-
},
|
|
11
|
-
extends: [
|
|
12
|
-
'eslint:recommended',
|
|
13
|
-
'plugin:prettier/recommended'
|
|
14
|
-
],
|
|
15
|
-
rules: {
|
|
16
|
-
semi: ['error', 'always'],
|
|
17
|
-
quotes: ['error', 'single'],
|
|
18
|
-
'no-unused-vars': ['warn'],
|
|
19
|
-
'no-empty': 'off',
|
|
20
|
-
'no-useless-catch': 'off',
|
|
21
|
-
},
|
|
22
|
-
};
|
package/.nojekyll
DELETED
|
File without changes
|
package/.prettierrc
DELETED
package/CONTRIBUTING.md
DELETED
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
# Contributing
|
|
2
|
-
|
|
3
|
-
Thanks for contributing to `performance-helpers`.
|
|
4
|
-
|
|
5
|
-
This project is a small, performance-focused JavaScript toolbox for Node.js and browser runtimes. Contributions should stay consistent with that goal: small APIs, predictable behavior, low overhead, and clear documentation.
|
|
6
|
-
|
|
7
|
-
Repository: <https://github.com/AbelVM/performance-helpers>
|
|
8
|
-
|
|
9
|
-
## Prerequisites
|
|
10
|
-
|
|
11
|
-
- Node.js 16 or newer
|
|
12
|
-
- npm
|
|
13
|
-
|
|
14
|
-
Install dependencies:
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
npm install
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Project layout
|
|
21
|
-
|
|
22
|
-
- `src/helpers/`: helper implementations
|
|
23
|
-
- `src/utils/`: small shared utilities
|
|
24
|
-
- `test/`: Vitest coverage for helpers and edge cases
|
|
25
|
-
- `guides/`: user-facing helper guides
|
|
26
|
-
- `bench/`: benchmark runners and benchmark docs
|
|
27
|
-
- `types/`: generated declaration output
|
|
28
|
-
|
|
29
|
-
## Development workflow
|
|
30
|
-
|
|
31
|
-
1. Make the smallest change that solves the problem.
|
|
32
|
-
2. Keep public APIs stable unless the change explicitly requires API work.
|
|
33
|
-
3. Add or update tests for behavior changes.
|
|
34
|
-
4. Update the relevant guide or README entry when user-facing behavior changes.
|
|
35
|
-
5. Run the relevant validation commands before opening a PR.
|
|
36
|
-
|
|
37
|
-
## Useful commands
|
|
38
|
-
|
|
39
|
-
Run tests:
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
npm run test
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
Run linting:
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
npm run lint
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Auto-fix lint issues:
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
npm run lint:fix
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Format source and markdown:
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
npm run format
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Generate declaration files:
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
npm run types:generate
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
Build the project:
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
npm run build
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
Generate docs:
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
npm run docs
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Run benchmarks:
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
npm run bench
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
Run the full validation pipeline:
|
|
88
|
-
|
|
89
|
-
```bash
|
|
90
|
-
npm run build:full
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## Coding guidelines
|
|
94
|
-
|
|
95
|
-
- Prefer plain JavaScript and small abstractions over framework-style layering.
|
|
96
|
-
- Keep hot-path allocations and hidden work low.
|
|
97
|
-
- Avoid adding dependencies unless there is a clear, durable payoff.
|
|
98
|
-
- Preserve the existing naming style and file organization.
|
|
99
|
-
- Write examples and docs using realistic usage patterns, not placeholder pseudocode.
|
|
100
|
-
- When changing helper behavior, consider edge cases such as timeouts, cancellation, queue saturation, expiry, and cleanup.
|
|
101
|
-
|
|
102
|
-
## Testing expectations
|
|
103
|
-
|
|
104
|
-
- Add focused tests near the affected helper area in `test/`.
|
|
105
|
-
- Cover both normal behavior and failure or edge cases.
|
|
106
|
-
- Prefer narrow, explicit tests over large multi-concern tests.
|
|
107
|
-
- If a helper has concurrency, timing, or retry behavior, test the boundary conditions.
|
|
108
|
-
- Keep the repository-wide coverage baseline green; use helper-specific work to raise weaker files toward Tier 1.
|
|
109
|
-
|
|
110
|
-
## Tier 1 helper checklist
|
|
111
|
-
|
|
112
|
-
Use this checklist when promoting or maintaining a helper as Tier 1:
|
|
113
|
-
|
|
114
|
-
- The helper has a dedicated guide and a README entry.
|
|
115
|
-
- Public methods and constructor options have concise JSDoc with edge-case behavior spelled out.
|
|
116
|
-
- Behavior-changing work includes focused regression tests.
|
|
117
|
-
- The helper keeps per-file coverage at or above the repository targets during promotion, with branch coverage treated as mandatory.
|
|
118
|
-
- Known correctness issues are fixed before broadening the API.
|
|
119
|
-
- Performance-sensitive paths avoid avoidable allocations, duplicate clocks, and duplicated state machines.
|
|
120
|
-
- If the helper composes other helpers, shared substrate should be reused instead of reimplemented.
|
|
121
|
-
|
|
122
|
-
Helpers that cannot satisfy this bar without excessive complexity should stay advanced or internal until their scope is reduced.
|
|
123
|
-
|
|
124
|
-
Current exceptions to treat deliberately rather than mechanically:
|
|
125
|
-
|
|
126
|
-
- `PowerPool` is an advanced helper. Its scope is intentionally broader than most helpers here, so promotion work should focus on correctness, docs, and high-value edge cases instead of forcing it into the same maintenance profile as the smallest primitives.
|
|
127
|
-
- `PowerRateLimit` currently has an anomalous function-coverage number despite strong public-path coverage. Do not treat that metric alone as proof of missing behavior unless a concrete branch or regression is identified.
|
|
128
|
-
- For broad helpers, prefer documenting scope and trade-offs over adding low-value tests that only improve a report without increasing confidence.
|
|
129
|
-
|
|
130
|
-
## Documentation expectations
|
|
131
|
-
|
|
132
|
-
Update documentation when any of the following changes:
|
|
133
|
-
|
|
134
|
-
- public API
|
|
135
|
-
- constructor options
|
|
136
|
-
- method semantics
|
|
137
|
-
- examples
|
|
138
|
-
- performance trade-offs
|
|
139
|
-
- recommended helper combinations
|
|
140
|
-
|
|
141
|
-
At minimum, check whether one of these files needs an update:
|
|
142
|
-
|
|
143
|
-
- `README.md`
|
|
144
|
-
- `guides/*.md`
|
|
145
|
-
- `guides/metaGuide.md`
|
|
146
|
-
|
|
147
|
-
## Pull requests
|
|
148
|
-
|
|
149
|
-
A good pull request should include:
|
|
150
|
-
|
|
151
|
-
- a clear problem statement
|
|
152
|
-
- a concise summary of the change
|
|
153
|
-
- tests for behavior changes
|
|
154
|
-
- docs updates when user-facing behavior changed
|
|
155
|
-
- notes about benchmark impact when performance-sensitive code changed
|
|
156
|
-
|
|
157
|
-
If the change affects runtime cost, concurrency, or memory behavior, include benchmark numbers or at least a short explanation of the expected trade-off.
|
|
158
|
-
|
|
159
|
-
## Scope guidance
|
|
160
|
-
|
|
161
|
-
Good contributions:
|
|
162
|
-
|
|
163
|
-
- bug fixes
|
|
164
|
-
- test improvements
|
|
165
|
-
- documentation clarifications
|
|
166
|
-
- performance improvements with evidence
|
|
167
|
-
- small, coherent helper enhancements
|
|
168
|
-
|
|
169
|
-
Higher-risk changes that need extra care:
|
|
170
|
-
|
|
171
|
-
- public API redesigns
|
|
172
|
-
- new dependencies
|
|
173
|
-
- behavior changes in core helpers like cache, pool, queue, retry, or rate limiting
|
|
174
|
-
- changes that make examples or guides drift from the actual implementation
|
|
175
|
-
|
|
176
|
-
## Questions
|
|
177
|
-
|
|
178
|
-
If you are unsure whether a change fits the project, open an issue or draft PR with the intended API, behavior, and trade-offs before expanding the implementation.
|
package/assets/1_Caching.md
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
# Caching
|
|
2
|
-
|
|
3
|
-
- [PowerCache: Caching (LRU + TTL + weight) and memoizing](../guides/powerCache.md). An in-memory, memory-efficient LRU cache with TTL, weighted eviction and an optional reusable node pool.
|
|
4
|
-
- [PowerTTLMap: Map with per-key TTL](../guides/powerTTLMap.md). Lightweight `Map`-like store where keys expire lazily on access.
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# Parallelizing
|
|
2
|
-
|
|
3
|
-
- [PowerPool: Worker pool](../guides/powerPool.md). A small, dependency-free worker pool that wraps underlying Worker instances.
|
|
4
|
-
- [PowerChunker: Chunk + pool helper](../guides/powerChunking.md). Convenience helper to chunk iterables and process items via a `PowerPool`.
|
|
5
|
-
- [PowerBulkhead: Partitioned executor](../guides/powerBulkhead.md). Isolate noisy workloads into separate lanes so one hot partition cannot starve the rest.
|
|
6
|
-
- [PowerCircuit: Circuit breaker](../guides/powerCircuit.md). Small circuit breaker to protect external services from cascading failures.
|
|
7
|
-
- [PowerRetry: Retry with backoff](../guides/powerRetry.md). Helper for retrying flaky async operations with configurable backoff and jitter.
|
|
8
|
-
- [PowerDeadline: Timeout, retry budget, and cancellation](../guides/powerDeadline.md). Wrap async work with per-attempt timeouts, overall deadlines, and retry policy.
|
|
9
|
-
- [PowerHistogram: Lock-free percentile estimator](../guides/powerHistogram.md). Compact in-process histogram for latency telemetry and estimated percentiles.
|
|
10
|
-
- [PowerBackpressure: Producer-facing backpressure controller](../guides/powerBackpressure.md). Gate producers with adaptive refill and bounded waiting.
|
|
11
|
-
- [PowerBatch: Microtask coalescing dispatcher](../guides/powerBatch.md). Coalesce synchronous calls into compact batches for bulk operations.
|
|
12
|
-
- [PowerLatch: Counting barrier](../guides/powerLatch.md). Simple barrier that resolves when a count reaches zero. Useful for coordinating out-of-band task completions.
|
|
13
|
-
- [PowerThrottle: A token-bucket limiter](guides/powerThrottle.md). A tiny rate limiter useful for pacing external work or cooperating with `PowerPool`. New: supports `reserve()`/`release()` for reservation-style workflows.
|
|
14
|
-
- [PowerRateLimit: Compose multiple limiters](guides/powerRateLimit.md). Combine `PowerThrottle`, `PowerSlidingWindow` and others; supports an `atomic` option to attempt atomic consumes across composed limiters.
|
|
15
|
-
- [PowerSlidingWindow: Sliding-window limiter](../guides/powerSlidingWindow.md). A simple rolling-window limiter for quota-style rate limiting.
|
|
16
|
-
- [PowerQueue: O(1) ring-buffer queue](../guides/powerQueue.md). A resizable, high-performance queue intended for use in `PowerPool` and other high-throughput scenarios.
|
|
17
|
-
- [PowerSemaphore: Async concurrency gate](../guides/powerSemaphore.md). Lightweight semaphore for limiting concurrent I/O and fan-out workloads.
|
|
18
|
-
- [PowerEventBus: Typed micro event bus](../guides/powerEventBus.md). Lightweight pub/sub for intra-process coordination between helpers.
|
package/assets/3_Logging.md
DELETED
package/assets/404.md
DELETED
package/assets/4_Utils.md
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
# Utils
|
|
2
|
-
|
|
3
|
-
- [PowerBuffer: Encode/decode JS objects to transferables for worker messaging](../guides/powerBuffer.md). Lightweight helpers for encoding/decoding JSON to/from binary (Uint8Array / ArrayBuffer / Node Buffer).
|
|
4
|
-
- [PowerDefer: Deferred promise primitive](../guides/powerDefer.md). Small utility that separates a `Promise` from its `resolve`/`reject` functions.
|
|
5
|
-
- [PowerPermitGate: Permit queue helper](../guides/powerPermitGate.md). Low-level concurrency gate that manages permits and FIFO waiters for building semaphore or backpressure primitives.
|
|
6
|
-
- [PowerScheduler: Work coalescing scheduler](../guides/powerScheduler.md). Lightweight scheduler for batching deferred work into a single microtask or macrotask flush.
|
|
7
|
-
- [PowerSubscriberSet: Shared listener registry](../guides/powerSubscriberSet.md). Internal subscriber helper with optional weak references and once-listener support.
|
|
8
|
-
- [PowerObserver: Lightweight reactive value](../guides/powerObserver.md). Tiny observable primitive for synchronous subscriptions to a single value.
|
|
9
|
-
- [Now utilities: high-resolution timers and measure helpers](../guides/now.md) — `nowMs()`, `measureSync()`, `measureAsync()` and timing best-practices.
|
|
10
|
-
- [Errors utilities: recommended error shapes and patterns](../guides/errors.md) — guidance for attaching `duration`, `correlationId` and structured diagnostics to errors and responses
|
package/assets/logo.png
DELETED
|
Binary file
|
package/assets/navigation.md
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
[home](README.md)
|
|
2
|
-
[Quick Guide](guides/metaGuide.md)
|
|
3
|
-
[Caching](assets/1_Caching.md)
|
|
4
|
-
[Parallelizing](assets/2_Parallelizing.md)
|
|
5
|
-
[Logging](assets/3_Logging.md)
|
|
6
|
-
[Utils](assets/4_Utils.md)
|
|
7
|
-
[API](docs/README.md)
|
|
8
|
-
[Benchmark](bench/results.md)
|
|
9
|
-
[Contributing](CONTRIBUTING.md)
|
|
10
|
-
[License](LICENSE.md)
|
package/bench/README.md
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
# Benchmarks
|
|
2
|
-
|
|
3
|
-
Lightweight benchmarking helpers for `PowerPool` and `PowerCache`.
|
|
4
|
-
|
|
5
|
-
This folder contains a small harness (`bench/run.js`) that measures:
|
|
6
|
-
|
|
7
|
-
- single-threaded CPU-bound compute (baseline) with **p50/p95/p99** per-task latency
|
|
8
|
-
- multi-worker `PowerPool` performance across pool sizes with **speedup vs single-threaded**
|
|
9
|
-
- a simple `PowerCache` hit/miss benchmark
|
|
10
|
-
- `PowerPool + PowerCache` optimized cache reuse patterns
|
|
11
|
-
- `PowerPool` autoscaling performance
|
|
12
|
-
- `PowerMemoizer` memoization overhead with duplicate keys
|
|
13
|
-
- multiple real-world load profiles: `0%`, `25%`, `50%`, `75%`, and `100%` variable load
|
|
14
|
-
- additional realistic scenario benchmarks, including:
|
|
15
|
-
- `Burstiness`: sudden bursts of work followed by short quiet periods
|
|
16
|
-
- `Mixed task sizes`: alternating light and heavy work items to mimic uneven request costs
|
|
17
|
-
- `Ramp traffic`: gradual ramp-up and ramp-down of task submission rates
|
|
18
|
-
- `Variable payload sizes`: payloads with different serialized sizes to exercise data movement
|
|
19
|
-
- `I/O bound`: tasks that include small async wait periods to simulate I/O latency
|
|
20
|
-
- `Thundering herd`: many tasks contending for the same cache key at once
|
|
21
|
-
- `Cache hit-ratio sweeps`: low/medium/high reuse ratios for cache-backed work
|
|
22
|
-
- `Cache warmup behavior`: cold vs warm cache performance for repeated workloads
|
|
23
|
-
- `Cache eviction under pressure`: tight maxEntries (20% of unique keys) measuring LRU overhead
|
|
24
|
-
- `Serial vs concurrent getOrSetAsync`: in-flight deduplication benefit quantified
|
|
25
|
-
- **helper micro-benchmarks** for primitives not covered by the pool harness:
|
|
26
|
-
- `PowerRateLimit`: tryConsume throughput under rate (all pass) and over rate (~50% rejected)
|
|
27
|
-
- `PowerCircuit`: `call()` overhead in closed (happy path) vs open (fast-fail) state
|
|
28
|
-
- `PowerRetry`: `run()` overhead with 0 retries and 1 retry (baseDelay=0)
|
|
29
|
-
- `PowerSemaphore`: serial (limit=1) and concurrent (limit=8) permit acquisition
|
|
30
|
-
- `PowerBulkhead`: single partition vs 2-partition critical/background isolation
|
|
31
|
-
- `PowerBatch`: individual dispatch (maxSize=1) vs coalesced dispatch
|
|
32
|
-
- `PowerBackpressure`: acquire/release with no pressure and with capacity=100
|
|
33
|
-
- `PowerTTLMap`: set/get throughput with long TTL (no eviction) and short TTL (1 ms, high churn)
|
|
34
|
-
- `PowerEventBus`: `emit` fan-out throughput at 1 / 10 / 50 / 100 subscribers
|
|
35
|
-
- `PowerDeadline`: success path overhead and abort-path cost when task exceeds deadline
|
|
36
|
-
- `PowerSlidingWindow`: `tryConsume` throughput under capacity and at capacity
|
|
37
|
-
- `PowerQueue`: bulk push+shift and interleaved (ring-buffer steady state)
|
|
38
|
-
- **historical delta comparison**: on each run, results are compared against the previous `results.json` and regressions/improvements > 5% are highlighted in the markdown
|
|
39
|
-
|
|
40
|
-
Quick usage
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
# Run the full benchmark suite (profiles + cache + helpers)
|
|
44
|
-
npm run bench
|
|
45
|
-
|
|
46
|
-
# Run only the profile-based worker-pool benchmarks (across variable load mixes)
|
|
47
|
-
npm run bench:pool
|
|
48
|
-
|
|
49
|
-
# Run only the cache workload
|
|
50
|
-
npm run bench:cache
|
|
51
|
-
|
|
52
|
-
# Run the profile-based pool benchmark directly
|
|
53
|
-
node bench/run.js profiles
|
|
54
|
-
|
|
55
|
-
# Run only the realistic scenario benchmarks
|
|
56
|
-
node bench/run.js scenarios
|
|
57
|
-
|
|
58
|
-
# Run only the helper micro-benchmarks
|
|
59
|
-
node bench/run.js helpers
|
|
60
|
-
|
|
61
|
-
# Alias for the same profile benchmark flow
|
|
62
|
-
node bench/run.js variable
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
Environment variables (defaults shown)
|
|
66
|
-
|
|
67
|
-
- `BENCH_TASKS` (default: `1000`) — number of tasks submitted to the pool (or keys for cache benchmark)
|
|
68
|
-
- `BENCH_ITERS` (default: `1000000`) — work per task (higher = heavier per-task CPU)
|
|
69
|
-
- `BENCH_POOLS` (default: `1,2,4,8`) — comma-separated pool sizes when running pool benchmarks
|
|
70
|
-
- `BENCH_POOL_TIMEOUT` (default: `0`) — ms timeout for each `PowerPool` run; set to `0` to disable timeout and let the pool run to completion
|
|
71
|
-
- `BENCH_CACHE_DUPLICATE_KEYS` (default: `10`) — unique key count for cache getOrSetAsync duplicate-key benchmark
|
|
72
|
-
- `BENCH_MEMOIZER_DUPLICATE_KEYS` (default: `10`) — unique key count for PowerMemoizer repeated-call benchmark
|
|
73
|
-
- `BENCH_AUTOSCALE_CACHE_KEYS` (default: `10`) — unique key count for autoscale + cache duplicate-key benchmark
|
|
74
|
-
- `BENCH_POOL_RUNS` (default: `3`) — repeat each pool/scenario variant N times and report the result closest to the median wall-clock time; set to `3` for more stable pool numbers at the cost of a ~3× longer run
|
|
75
|
-
- `BENCH_RUNS` (default: `5`) — repeat each helper micro-benchmark N times and report the median; reduces measurement noise from OS jitter and JIT warm-up variance
|
|
76
|
-
- `BENCH_HELPER_OPS` (default: `100000`) — operation count for each helper micro-benchmark variant
|
|
77
|
-
|
|
78
|
-
Tips and notes
|
|
79
|
-
|
|
80
|
-
- Start with small values during iteration: `BENCH_TASKS=2 BENCH_ITERS=10000` to validate changes quickly
|
|
81
|
-
- Use `BENCH_POOL_TIMEOUT=0` when you expect long runs and don't want the harness to fall back to the plain `worker_threads` implementation
|
|
82
|
-
- Use `BENCH_POOL_RUNS=3` for more stable pool benchmark numbers on a noisy machine (runs each pool variant 3 times, reports median)
|
|
83
|
-
- Use `BENCH_RUNS=7` for even more stable helper micro-benchmark numbers on a noisy machine
|
|
84
|
-
- Use `BENCH_HELPER_OPS=10000` to run a quick smoke test of all helpers
|
|
85
|
-
- The harness writes human-readable results to `bench/results.md` and writes a machine-readable copy to `results.json` at the repository root; the markdown contains a link to that file
|
|
86
|
-
|
|
87
|
-
Example quick smoke run
|
|
88
|
-
|
|
89
|
-
```bash
|
|
90
|
-
BENCH_TASKS=2 BENCH_ITERS=10000 BENCH_POOLS=1 BENCH_POOL_TIMEOUT=0 BENCH_HELPER_OPS=1000 node bench/run.js pool
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
Reproducibility
|
|
94
|
-
|
|
95
|
-
- Run the same `BENCH_TASKS`, `BENCH_ITERS` and `BENCH_POOLS` across machines to compare relative performance
|
|
96
|
-
- Benchmark results are noisy on shared machines; run multiple times and take median/mean as appropriate
|
|
97
|
-
- The `Δ prev` column in the markdown shows changes relative to the previous `results.json` on disk — commit `results.json` to track regressions over time
|