1'use strict'; 2 3const { createBenchmark } = require('../common.js'); 4const { format } = require('util'); 5 6const methods = [ 7 'restAndSpread', 8 'argumentsAndApply', 9 'restAndApply', 10 'predefined', 11]; 12 13const bench = createBenchmark(main, { 14 method: methods, 15 n: [1e6], 16}); 17 18function usingRestAndSpread(...args) { 19 format(...args); 20} 21 22function usingRestAndApply(...args) { 23 format.apply(null, args); 24} 25 26function usingArgumentsAndApply() { 27 format.apply(null, arguments); 28} 29 30function usingPredefined() { 31 format('part 1', 'part', 2, 'part 3', 'part', 4); 32} 33 34function main({ n, method, args }) { 35 let fn; 36 switch (method) { 37 case 'restAndSpread': 38 fn = usingRestAndSpread; 39 break; 40 case 'restAndApply': 41 fn = usingRestAndApply; 42 break; 43 case 'argumentsAndApply': 44 fn = usingArgumentsAndApply; 45 break; 46 case 'predefined': 47 fn = usingPredefined; 48 break; 49 default: 50 throw new Error(`Unexpected method "${method}"`); 51 } 52 53 bench.start(); 54 for (let i = 0; i < n; i++) 55 fn('part 1', 'part', 2, 'part 3', 'part', 4); 56 bench.end(n); 57} 58