mirror of https://github.com/nodejs/node.git
52 lines
1.3 KiB
JavaScript
52 lines
1.3 KiB
JavaScript
// Tests the impact on eager operations required for policies affecting
|
|
// general startup, does not test lazy operations
|
|
'use strict';
|
|
const common = require('../common.js');
|
|
|
|
const configs = {
|
|
n: [1024]
|
|
};
|
|
|
|
const options = {
|
|
flags: ['--expose-internals']
|
|
};
|
|
|
|
const bench = common.createBenchmark(main, configs, options);
|
|
|
|
function main(conf) {
|
|
const hash = (str, algo) => {
|
|
const hash = require('crypto').createHash(algo);
|
|
return hash.update(str).digest('base64');
|
|
};
|
|
const resources = Object.fromEntries(
|
|
// Simulate graph of 1k modules
|
|
Array.from({ length: 1024 }, (_, i) => {
|
|
return [`./_${i}`, {
|
|
integrity: `sha256-${hash(`// ./_${i}`, 'sha256')}`,
|
|
dependencies: Object.fromEntries(Array.from({
|
|
// Average 3 deps per 4 modules
|
|
length: Math.floor((i % 4) / 2)
|
|
}, (_, ii) => {
|
|
return [`_${ii}`, `./_${i - ii}`];
|
|
})),
|
|
}];
|
|
})
|
|
);
|
|
const json = JSON.parse(JSON.stringify({ resources }), (_, o) => {
|
|
if (o && typeof o === 'object') {
|
|
Reflect.setPrototypeOf(o, null);
|
|
Object.freeze(o);
|
|
}
|
|
return o;
|
|
});
|
|
const { Manifest } = require('internal/policy/manifest');
|
|
|
|
bench.start();
|
|
|
|
for (let i = 0; i < conf.n; i++) {
|
|
new Manifest(json, 'file://benchmark/policy-relative');
|
|
}
|
|
|
|
bench.end(conf.n);
|
|
}
|