File tree Expand file tree Collapse file tree 4 files changed +40
-5
lines changed Expand file tree Collapse file tree 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');
88const zlib = require ( 'zlib' ) ;
99const FluentLoggerError = require ( './logger-error' ) ;
1010const EventTime = require ( './event-time' ) ;
11+ const Queue = require ( 'tiny-queue' ) ;
1112
1213const codec = msgpack . createCodec ( ) ;
1314codec . 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 {
Original file line number Diff line number Diff line change 3131 "node" : " >=6"
3232 },
3333 "dependencies" : {
34- "msgpack-lite" : " *"
34+ "msgpack-lite" : " *" ,
35+ "tiny-queue" : " ^0.2.1"
3536 },
3637 "devDependencies" : {
3738 "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) => {
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 } ) ;
You can’t perform that action at this time.
0 commit comments