114 lines
2.1 KiB
JavaScript
114 lines
2.1 KiB
JavaScript
|
|
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++;
|
||
|
|
}
|
||
|
|
}
|