angular-docs-cn/modules/benchmarks/src/change_detection/change_detection_benchmark.js

60 lines
1.3 KiB
JavaScript
Raw Normal View History

2014-11-14 16:51:55 -08:00
import {ListWrapper, MapWrapper} from 'facade/collection';
import {Parser} from 'change_detection/parser/parser';
import {Lexer} from 'change_detection/parser/lexer';
import {reflector} from 'reflection/reflection';
import {
ChangeDetector,
ProtoRecordRange,
WatchGroupDispatcher,
} from 'change_detection/change_detector';
var ITERATIONS = 100000;
export function run () {
reflector.registerGetters({
'a': function(obj){return obj.a},
'b': function(obj){return obj.b},
'c': function(obj){return obj.c}
});
reflector.registerSetters({
'a': function(obj, v){return obj.a = v},
'b': function(obj, v){return obj.b = v},
'c': function(obj, v){return obj.c = v}
});
var parser = new Parser(new Lexer());
var astWithSource = parser.parseBinding('a + b * c');
var prr = new ProtoRecordRange();
prr.addRecordsFromAST(astWithSource.ast, 'memo', false);
var dispatcher = new DummyDispatcher();
var rr = prr.instantiate(dispatcher, MapWrapper.create());
rr.setContext(new Component());
var cd = new ChangeDetector(rr);
for (var i = 0; i < ITERATIONS; ++i) {
cd.detectChanges();
}
}
class DummyDispatcher extends WatchGroupDispatcher {
onRecordChange(record, context) {
}
}
class Component {
a:number;
b:number;
c:number;
constructor() {
this.a = 1;
this.b = 2;
this.c = 3;
}
}