angular-cn/modules/benchmarks/src/di/di_benchmark.js

114 lines
2.1 KiB
JavaScript
Raw Normal View History

import {Injector, Key} from "di/di";
import {reflector} from 'reflection/reflection';
import {document, DOM} from 'facade/dom';
var count = 0;
function setupReflector() {
reflector.registerType(A, {
'factory': () => new A(),
'parameters': [],
'annotations' : []
});
reflector.registerType(B, {
'factory': (a) => new B(a),
'parameters': [[A]],
'annotations' : []
});
reflector.registerType(C, {
'factory': (b) => new C(b),
'parameters': [[B]],
'annotations' : []
});
reflector.registerType(D, {
'factory': (c,b) => new D(c,b),
'parameters': [[C],[B]],
'annotations' : []
});
reflector.registerType(E, {
'factory': (d,c) => new E(d,c),
'parameters': [[D],[C]],
'annotations' : []
});
}
export function main() {
setupReflector();
var bindings = [A, B, C, D, E];
var injector = new Injector(bindings);
var D_KEY = Key.get(D);
var E_KEY = Key.get(E);
var childInjector = injector.
createChild([]).
createChild([]).
createChild([]).
createChild([]).
createChild([]);
function getByToken (_) {
for (var i = 0; i < 20000; ++i) {
injector.get(D);
injector.get(E);
}
}
function getByKey(_) {
for (var i = 0; i < 20000; ++i) {
injector.get(D_KEY);
injector.get(E_KEY);
}
}
function getChild (_) {
for (var i = 0; i < 20000; ++i) {
childInjector.get(D);
childInjector.get(E);
}
}
function instantiate (_) {
for (var i = 0; i < 5000; ++i) {
var child = injector.createChild([E]);
child.get(E);
}
}
DOM.on(DOM.querySelector(document, '#getByToken'), 'click', getByToken);
DOM.on(DOM.querySelector(document, '#getByKey'), 'click', getByKey);
DOM.on(DOM.querySelector(document, '#getChild'), 'click', getChild);
DOM.on(DOM.querySelector(document, '#instantiate'), 'click', instantiate);
}
class A {
constructor() {
count++;
}
}
class B {
constructor(a:A) {
count++;
}
}
class C {
constructor(b:B) {
count++;
}
}
class D {
constructor(c:C, b:B) {
count++;
}
}
class E {
constructor(d:D, c:C) {
count++;
}
}