Skip to content

Commit b29679d

Browse files
mcollinajacobheun
authored andcommitted
refactor: stat use for over forEach (libp2p#295)
forEach is 10x slower than a regular for(;;) loop, and it should be avoided in hot code paths.
1 parent 1b445cf commit b29679d

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

src/stats/stat.js

+16-8
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,18 @@ class Stats extends EventEmitter {
2525

2626
this._update = this._update.bind(this)
2727

28-
initialCounters.forEach((key) => {
28+
const intervals = this._options.movingAverageIntervals
29+
30+
for (var i = 0; i < initialCounters.length; i++) {
31+
var key = initialCounters[i]
2932
this._stats[key] = Big(0)
3033
this._movingAverages[key] = {}
31-
this._options.movingAverageIntervals.forEach((interval) => {
32-
const ma = this._movingAverages[key][interval] = MovingAverage(interval)
34+
for (var k = 0; k < intervals.length; k++) {
35+
var interval = intervals[k]
36+
var ma = this._movingAverages[key][interval] = MovingAverage(interval)
3337
ma.push(this._frequencyLastTime, 0)
34-
})
35-
})
38+
}
39+
}
3640
}
3741

3842
/**
@@ -184,13 +188,17 @@ class Stats extends EventEmitter {
184188
if (!movingAverages) {
185189
movingAverages = this._movingAverages[key] = {}
186190
}
187-
this._options.movingAverageIntervals.forEach((movingAverageInterval) => {
188-
let movingAverage = movingAverages[movingAverageInterval]
191+
192+
const intervals = this._options.movingAverageIntervals
193+
194+
for (var i = 0; i < intervals.length; i++) {
195+
var movingAverageInterval = intervals[i]
196+
var movingAverage = movingAverages[movingAverageInterval]
189197
if (!movingAverage) {
190198
movingAverage = movingAverages[movingAverageInterval] = MovingAverage(movingAverageInterval)
191199
}
192200
movingAverage.push(latestTime, hz)
193-
})
201+
}
194202
}
195203

196204
/**

0 commit comments

Comments
 (0)