parser.benchmark.js (2295B)
1 'use strict'; 2 3 const benchmark = require('benchmark'); 4 const crypto = require('crypto'); 5 6 const WebSocket = require('..'); 7 8 const Receiver = WebSocket.Receiver; 9 const Sender = WebSocket.Sender; 10 11 const options = { 12 fin: true, 13 rsv1: false, 14 mask: true, 15 readOnly: false 16 }; 17 18 function createBinaryFrame(length) { 19 const list = Sender.frame(crypto.randomBytes(length), { 20 opcode: 0x02, 21 ...options 22 }); 23 24 return Buffer.concat(list); 25 } 26 27 const pingFrame1 = Buffer.concat( 28 Sender.frame(crypto.randomBytes(5), { opcode: 0x09, ...options }) 29 ); 30 31 const textFrame = Buffer.from('819461616161' + '61'.repeat(20), 'hex'); 32 const pingFrame2 = Buffer.from('8980146e915a', 'hex'); 33 const binaryFrame1 = createBinaryFrame(125); 34 const binaryFrame2 = createBinaryFrame(65535); 35 const binaryFrame3 = createBinaryFrame(200 * 1024); 36 const binaryFrame4 = createBinaryFrame(1024 * 1024); 37 38 const suite = new benchmark.Suite(); 39 const receiver = new Receiver({ 40 binaryType: 'nodebuffer', 41 extensions: {}, 42 isServer: true, 43 skipUTF8Validation: false 44 }); 45 46 suite.add('ping frame (5 bytes payload)', { 47 defer: true, 48 fn: (deferred) => { 49 receiver.write(pingFrame1, deferred.resolve.bind(deferred)); 50 } 51 }); 52 suite.add('ping frame (no payload)', { 53 defer: true, 54 fn: (deferred) => { 55 receiver.write(pingFrame2, deferred.resolve.bind(deferred)); 56 } 57 }); 58 suite.add('text frame (20 bytes payload)', { 59 defer: true, 60 fn: (deferred) => { 61 receiver.write(textFrame, deferred.resolve.bind(deferred)); 62 } 63 }); 64 suite.add('binary frame (125 bytes payload)', { 65 defer: true, 66 fn: (deferred) => { 67 receiver.write(binaryFrame1, deferred.resolve.bind(deferred)); 68 } 69 }); 70 suite.add('binary frame (65535 bytes payload)', { 71 defer: true, 72 fn: (deferred) => { 73 receiver.write(binaryFrame2, deferred.resolve.bind(deferred)); 74 } 75 }); 76 suite.add('binary frame (200 KiB payload)', { 77 defer: true, 78 fn: (deferred) => { 79 receiver.write(binaryFrame3, deferred.resolve.bind(deferred)); 80 } 81 }); 82 suite.add('binary frame (1 MiB payload)', { 83 defer: true, 84 fn: (deferred) => { 85 receiver.write(binaryFrame4, deferred.resolve.bind(deferred)); 86 } 87 }); 88 89 suite.on('cycle', (e) => console.log(e.target.toString())); 90 91 if (require.main === module) { 92 suite.run({ async: true }); 93 } else { 94 module.exports = suite; 95 }