Skip to content

Commit 1a6df11

Browse files
author
Thiago Santos
committed
proposing Queue use instead of array
Signed-off-by: Thiago Santos <[email protected]>
1 parent 2aa5d9c commit 1a6df11

File tree

4 files changed

+40
-5
lines changed

4 files changed

+40
-5
lines changed

lib/sender.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const tls = require('tls');
88
const zlib = require('zlib');
99
const FluentLoggerError = require('./logger-error');
1010
const EventTime = require('./event-time');
11+
const Queue = require('tiny-queue');
1112

1213
const codec = msgpack.createCodec();
1314
codec.addExtPacker(0x00, EventTime, EventTime.pack);
@@ -35,7 +36,7 @@ class FluentSender {
3536
this._timeResolution = options.milliseconds ? 1 : 1000;
3637
this._socket = null;
3738
if (this._eventMode === 'Message') {
38-
this._sendQueue = []; // queue for items waiting for being sent.
39+
this._sendQueue = new Queue(); // queue for items waiting for being sent.
3940
this._flushInterval = 0;
4041
this._messageQueueSizeLimit = options.messageQueueSizeLimit || 0;
4142
} else {

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
"node": ">=6"
3232
},
3333
"dependencies": {
34-
"msgpack-lite": "*"
34+
"msgpack-lite": "*",
35+
"tiny-queue": "^0.2.1"
3536
},
3637
"devDependencies": {
3738
"async": "*",

test/test.queue-performance.js

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/* eslint-disable no-console */
2+
'use strict';
3+
/* globals describe, it */
4+
/* eslint node/no-unpublished-require: ["error", {"allowModules": ["chai"]}] */
5+
const expect = require('chai').expect;
6+
const Queue = require('tiny-queue');
7+
8+
describe('queue performance', () => {
9+
it('should be more than 100 times faster than array for large lengths', () => {
10+
const array = [];
11+
const queue = new Queue();
12+
for (let i = 1; i < 100000; i++) {
13+
array.push(i);
14+
queue.push(i);
15+
}
16+
17+
18+
const startQueue = process.hrtime();
19+
while (queue.length > 0) {
20+
queue.shift();
21+
}
22+
const totalQueue = process.hrtime(startQueue);
23+
const startArray = process.hrtime();
24+
while (array.length > 0) {
25+
array.shift();
26+
}
27+
const totalArray = process.hrtime(startArray);
28+
29+
console.log(`Array time: ${totalArray[0] + totalArray[1] / 1e9}`);
30+
console.log(`Queue time: ${totalQueue[0] + totalQueue[1] / 1e9}`);
31+
expect(totalArray[0] + totalArray[1] / 1e9 > (totalQueue[0] + totalQueue[1] / 1e9) * 100).to.be.true;
32+
});
33+
})

test/test.sender.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -960,9 +960,9 @@ let doTest = (tls) => {
960960
s.emit('message3', {});
961961
s.emit('message4', {});
962962
expect(s._sendQueue.length).to.be.equal(3);
963-
expect(s._sendQueue[0].tag).to.be.equal('debug.message2');
964-
expect(s._sendQueue[1].tag).to.be.equal('debug.message3');
965-
expect(s._sendQueue[2].tag).to.be.equal('debug.message4');
963+
expect(s._sendQueue.shift().tag).to.be.equal('debug.message2');
964+
expect(s._sendQueue.shift().tag).to.be.equal('debug.message3');
965+
expect(s._sendQueue.shift().tag).to.be.equal('debug.message4');
966966
done();
967967
});
968968
});

0 commit comments

Comments
 (0)