File tree 4 files changed +40
-5
lines changed
4 files changed +40
-5
lines changed Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ const tls = require('tls');
8
8
const zlib = require ( 'zlib' ) ;
9
9
const FluentLoggerError = require ( './logger-error' ) ;
10
10
const EventTime = require ( './event-time' ) ;
11
+ const Queue = require ( 'tiny-queue' ) ;
11
12
12
13
const codec = msgpack . createCodec ( ) ;
13
14
codec . addExtPacker ( 0x00 , EventTime , EventTime . pack ) ;
@@ -35,7 +36,7 @@ class FluentSender {
35
36
this . _timeResolution = options . milliseconds ? 1 : 1000 ;
36
37
this . _socket = null ;
37
38
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.
39
40
this . _flushInterval = 0 ;
40
41
this . _messageQueueSizeLimit = options . messageQueueSizeLimit || 0 ;
41
42
} else {
Original file line number Diff line number Diff line change 31
31
"node" : " >=6"
32
32
},
33
33
"dependencies" : {
34
- "msgpack-lite" : " *"
34
+ "msgpack-lite" : " *" ,
35
+ "tiny-queue" : " ^0.2.1"
35
36
},
36
37
"devDependencies" : {
37
38
"async" : " *" ,
Original file line number Diff line number Diff line change
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
+ } )
Original file line number Diff line number Diff line change @@ -960,9 +960,9 @@ let doTest = (tls) => {
960
960
s . emit ( 'message3' , { } ) ;
961
961
s . emit ( 'message4' , { } ) ;
962
962
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' ) ;
966
966
done ( ) ;
967
967
} ) ;
968
968
} ) ;
You can’t perform that action at this time.
0 commit comments