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