1'use strict'; 2 3const fs = require('fs'); 4const path = require('path'); 5const common = require('../common.js'); 6const tmpdir = require('../../test/common/tmpdir'); 7const benchmarkDirectory = path.join(tmpdir.path, 'nodejs-benchmark-module'); 8 9const bench = common.createBenchmark(main, { 10 type: ['.js', '.json', 'dir'], 11 n: [1e4], 12}); 13 14function main({ type, n }) { 15 tmpdir.refresh(); 16 createEntryPoint(n); 17 18 switch (type) { 19 case '.js': 20 measureJSFile(n); 21 break; 22 case '.json': 23 measureJSONFile(n); 24 break; 25 case 'dir': 26 measureDir(n); 27 } 28 29 tmpdir.refresh(); 30} 31 32function measureJSFile(n) { 33 bench.start(); 34 for (let i = 0; i < n; i++) { 35 require(`${benchmarkDirectory}/${i}`); 36 } 37 bench.end(n); 38} 39 40function measureJSONFile(n) { 41 bench.start(); 42 for (let i = 0; i < n; i++) { 43 require(`${benchmarkDirectory}/json_${i}.json`); 44 } 45 bench.end(n); 46} 47 48function measureDir(n) { 49 bench.start(); 50 for (let i = 0; i < n; i++) { 51 require(`${benchmarkDirectory}${i}`); 52 } 53 bench.end(n); 54} 55 56function createEntryPoint(n) { 57 fs.mkdirSync(benchmarkDirectory); 58 59 const JSFileContent = 'module.exports = [];'; 60 const JSONFileContent = '[]'; 61 62 for (let i = 0; i < n; i++) { 63 // JS file. 64 fs.writeFileSync(`${benchmarkDirectory}/${i}.js`, JSFileContent); 65 66 // JSON file. 67 fs.writeFileSync(`${benchmarkDirectory}/json_${i}.json`, JSONFileContent); 68 69 // Dir. 70 fs.mkdirSync(`${benchmarkDirectory}${i}`); 71 fs.writeFileSync( 72 `${benchmarkDirectory}${i}/package.json`, 73 '{"main": "index.js"}', 74 ); 75 fs.writeFileSync( 76 `${benchmarkDirectory}${i}/index.js`, 77 JSFileContent, 78 ); 79 } 80} 81