1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
<!doctype html>
<script>
// delete window.Promise;
</script>
<script src="../dist/es6-module-loader.js"></script>
<script>
/* PARAMETERS */
var TREE_DEPTH = 10;
var NUM_MODULES = 1000;
/*
TREE LOOKS LIKE -
MODULE NUM_MODULES
|
|
------------------------------------- ... -----
| | |
MODULE 0 MODULE TREE_DEPTH ...
| |
MODULE 1 MODULE TREE_DEPTH + 1
... ...
MODULE TREE_DEPTH - 1 MODULE TREE_DEPTH * 2 - 1
THAT IS -
DEPTH = TREE_DEPTH
BREADTH = FLOOR(NUM_MODULES / TREE_DEPTH)
*/
/*
PERF RESULTS
------------
WITH 1000 modules,
TREE_DEPTH FULL LOAD TIME PER MODULE (including evaluation and defining)
1 0.25ms
10 0.27ms
50 0.30ms
100 0.35ms
500 0.90ms
1000 1.90ms
*/
System.set('module0', System.newModule({}));
System.instantiate = function(load) {
var num = parseInt(load.name.substr(6));
var deps = [];
// the last module depends on all of them
if (num == NUM_MODULES) {
for (var i = 0; i < NUM_MODULES; i += TREE_DEPTH)
deps.push('module' + i);
}
else if (num % TREE_DEPTH != TREE_DEPTH - 1)
deps = ['module' + (num + 1)];
return {
deps: deps,
execute: function() {
eval(load.source);
return System.newModule({});
}
};
}
function start() {
document.body.innerHTML = '';
var startTime = +Date.now();
for (var i = 1; i <= NUM_MODULES; i++)
System.define('module' + i, "function q() {} var p = 5;\n // non-trivial code");
System.import('module' + NUM_MODULES).then(function() {
document.body.innerHTML = ((Date.now() - startTime) / NUM_MODULES) + 'ms per module';
}).catch(function(e) {
setTimeout(function() {
throw e;
})
});
}
</script>
<body onclick="start()" style="height:100%">
<p>Click to start</p>
|