dgram: restore buffer optimization in fixBufferList · nodejs/node@dea5dd7

1+

'use strict';

2+3+

const common = require('../common.js');

4+

const dgram = require('dgram');

5+

const { Buffer } = require('buffer');

6+7+

const bench = common.createBenchmark(main, {

8+

type: ['string', 'buffer', 'mixed', 'typedarray'],

9+

chunks: [1, 4, 8, 16],

10+

len: [64, 512, 1024],

11+

n: [1000],

12+

});

13+14+

function main({ type, chunks, len, n }) {

15+

const socket = dgram.createSocket('udp4');

16+17+

let testData;

18+

switch (type) {

19+

case 'string':

20+

testData = Array(chunks).fill('a'.repeat(len));

21+

break;

22+

case 'buffer':

23+

testData = Array(chunks).fill(Buffer.alloc(len, 'a'));

24+

break;

25+

case 'mixed':

26+

testData = [];

27+

for (let i = 0; i < chunks; i++) {

28+

if (i % 2 === 0) {

29+

testData.push(Buffer.alloc(len, 'a'));

30+

} else {

31+

testData.push('a'.repeat(len));

32+

}

33+

}

34+

break;

35+

case 'typedarray':

36+

testData = Array(chunks).fill(new Uint8Array(len).fill(97));

37+

break;

38+

}

39+40+

bench.start();

41+42+

for (let i = 0; i < n; i++) {

43+

socket.send(testData, 12345, 'localhost', (err) => {

44+

if (err && err.code !== 'ENOTCONN' && err.code !== 'ECONNREFUSED') {

45+

throw err;

46+

}

47+

});

48+

}

49+50+

bench.end(n);

51+

socket.close();

52+

}