1'use strict'; 2 3/* eslint-disable dot-notation */ 4 5const common = require('../common.js'); 6 7const bench = common.createBenchmark(main, { 8 method: ['property', 'string', 'variable', 'symbol'], 9 n: [1e9], 10}); 11 12function runProperty(n) { 13 const object = {}; 14 15 bench.start(); 16 for (let i = 0; i < n; i++) { 17 object.p1 = 21; 18 object.p2 = 21; 19 object.p1 += object.p2; 20 } 21 bench.end(n); 22} 23 24function runString(n) { 25 const object = {}; 26 27 bench.start(); 28 for (let i = 0; i < n; i++) { 29 object['p1'] = 21; 30 object['p2'] = 21; 31 object['p1'] += object['p2']; 32 } 33 bench.end(n); 34} 35 36function runVariable(n) { 37 const object = {}; 38 const var1 = 'p1'; 39 const var2 = 'p2'; 40 41 bench.start(); 42 for (let i = 0; i < n; i++) { 43 object[var1] = 21; 44 object[var2] = 21; 45 object[var1] += object[var2]; 46 } 47 bench.end(n); 48} 49 50function runSymbol(n) { 51 const object = {}; 52 const symbol1 = Symbol('p1'); 53 const symbol2 = Symbol('p2'); 54 55 bench.start(); 56 for (let i = 0; i < n; i++) { 57 object[symbol1] = 21; 58 object[symbol2] = 21; 59 object[symbol1] += object[symbol2]; 60 } 61 bench.end(n); 62} 63 64function main({ n, method }) { 65 66 switch (method) { 67 case 'property': 68 runProperty(n); 69 break; 70 case 'string': 71 runString(n); 72 break; 73 case 'variable': 74 runVariable(n); 75 break; 76 case 'symbol': 77 runSymbol(n); 78 break; 79 default: 80 throw new Error(`Unexpected method "${method}"`); 81 } 82} 83