47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var log = console.log
 | |
|     , dlength = 700
 | |
|     , stime = 0
 | |
|     , boundary = new Buffer( 57 )
 | |
|     // build test data to parse
 | |
|     , data = ( function () {
 | |
|         var test = new Buffer( dlength * 1024 * 1024)
 | |
|             , t = 0
 | |
|             , tlen = test.length
 | |
|             ;
 | |
|         log( '- now building a %d GB test buffer..', ( dlength / 1024 ).toFixed( 2 ) );
 | |
|         for ( ; ++t < tlen; ) {
 | |
|             test[ t ] = t % 256;
 | |
|         }
 | |
|         log( '- test buffer created..' );
 | |
|         return test;
 | |
|     } )()
 | |
|     // crook parse method
 | |
|     , magicParse = function ( pattern, data ) {
 | |
|         var i = 0
 | |
|             , dlen = data.length
 | |
|             , plen = pattern.length
 | |
|             , pchar = pattern[ plen - 1 ]
 | |
|             ;
 | |
| 
 | |
|         log( '- now parsing test buffer with magic algorithm..' );
 | |
| 
 | |
|         for( stime = Date.now(); i < dlen; i += plen ) {
 | |
|             /*
 | |
|              * access data and compare current byte with the last byte of pattern,
 | |
|              * then skip plen bytes, no other comparison.
 | |
|              * best performance O(n/m)
 | |
|              */
 | |
|             if( pchar === data[ i ] ) {
 | |
|                 // ..
 | |
|             }
 | |
|         }
 | |
|         return [];
 | |
|     }
 | |
|     , results = magicParse( boundary, data )
 | |
|     , duration = ( Date.now() - stime )
 | |
|     , datarate = ( ( dlength / duration ) * ( 7.8125 ) )
 | |
|     ;
 | |
| 
 | |
| log( '- elapsed time is; %d millis (I\'m the best!)', duration );
 | |
| log( '- datarate is: %d Gbit/sec (Magic!)', ( datarate ).toFixed( 2 ) );
 | |
| log( '- results: 0 found (Sorry, I\'m a crook!)' ); |