1
1
'use strict' ;
2
2
const fs = require ( 'fs' ) ;
3
3
const path = require ( 'path' ) ;
4
+ const { builtinModules } = require ( 'module' ) ;
4
5
const common = require ( '../common.js' ) ;
5
6
6
7
const tmpdir = require ( '../../test/common/tmpdir' ) ;
7
- const benchmarkDirectory = path . join ( tmpdir . path , 'nodejs-benchmark-module' ) ;
8
+ let benchmarkDirectory = path . join ( tmpdir . path , 'nodejs-benchmark-module' ) ;
9
+
10
+ // Filter all irregular modules.
11
+ const otherModules = builtinModules . filter ( ( name ) => ! / \/ | ^ _ | ^ s y s / . test ( name ) ) ;
8
12
9
13
const bench = common . createBenchmark ( main , {
10
- n : [ 5e4 ] ,
11
- fullPath : [ 'true' , 'false' ] ,
12
- useCache : [ 'true' , 'false' ]
14
+ name : [ '' , '/' , '/index.js' ] ,
15
+ dir : [ 'rel' , 'abs' ] ,
16
+ files : [ 5e2 ] ,
17
+ n : [ 1 , 1e3 ] ,
18
+ cache : [ 'true' , 'false' ]
13
19
} ) ;
14
20
15
- function main ( { n, fullPath , useCache } ) {
21
+ function main ( { n, name , cache , files , dir } ) {
16
22
tmpdir . refresh ( ) ;
17
- try { fs . mkdirSync ( benchmarkDirectory ) ; } catch { }
18
- for ( var i = 0 ; i <= n ; i ++ ) {
23
+ fs . mkdirSync ( benchmarkDirectory ) ;
24
+ for ( var i = 0 ; i <= files ; i ++ ) {
19
25
fs . mkdirSync ( `${ benchmarkDirectory } ${ i } ` ) ;
20
26
fs . writeFileSync (
21
27
`${ benchmarkDirectory } ${ i } /package.json` ,
@@ -27,38 +33,28 @@ function main({ n, fullPath, useCache }) {
27
33
) ;
28
34
}
29
35
30
- if ( fullPath === 'true' )
31
- measureFull ( n , useCache === 'true' ) ;
32
- else
33
- measureDir ( n , useCache === 'true' ) ;
36
+ if ( dir === 'rel' )
37
+ benchmarkDirectory = path . relative ( __dirname , benchmarkDirectory ) ;
34
38
35
- tmpdir . refresh ( ) ;
36
- }
39
+ measureDir ( n , cache === 'true' , files , name ) ;
37
40
38
- function measureFull ( n , useCache ) {
39
- var i ;
40
- if ( useCache ) {
41
- for ( i = 0 ; i <= n ; i ++ ) {
42
- require ( `${ benchmarkDirectory } ${ i } /index.js` ) ;
43
- }
44
- }
45
- bench . start ( ) ;
46
- for ( i = 0 ; i <= n ; i ++ ) {
47
- require ( `${ benchmarkDirectory } ${ i } /index.js` ) ;
48
- }
49
- bench . end ( n ) ;
41
+ tmpdir . refresh ( ) ;
50
42
}
51
43
52
- function measureDir ( n , useCache ) {
44
+ function measureDir ( n , cache , files , name ) {
53
45
var i ;
54
- if ( useCache ) {
55
- for ( i = 0 ; i <= n ; i ++ ) {
56
- require ( `${ benchmarkDirectory } ${ i } ` ) ;
46
+ if ( cache ) {
47
+ for ( i = 0 ; i <= files ; i ++ ) {
48
+ require ( `${ benchmarkDirectory } ${ i } ${ name } ` ) ;
57
49
}
58
50
}
59
51
bench . start ( ) ;
60
- for ( i = 0 ; i <= n ; i ++ ) {
61
- require ( `${ benchmarkDirectory } ${ i } ` ) ;
52
+ for ( i = 0 ; i <= files ; i ++ ) {
53
+ for ( var j = 0 ; j < n ; j ++ )
54
+ require ( `${ benchmarkDirectory } ${ i } ${ name } ` ) ;
55
+ // Pretend mixed input (otherwise the results are less representative due to
56
+ // highly specialized code).
57
+ require ( otherModules [ i % otherModules . length ] ) ;
62
58
}
63
- bench . end ( n ) ;
59
+ bench . end ( n * files ) ;
64
60
}
0 commit comments