1- import { DOM } from 'angular2/src/dom/dom_adapter' ;
21import { BrowserDomAdapter } from 'angular2/src/dom/browser_adapter' ;
3- import { Type } from 'angular2/src/facade/lang' ;
4- import { document } from 'angular2/src/facade/browser' ;
2+ import { PromiseWrapper } from 'angular2/src/facade/async' ;
3+ import { ListWrapper , MapWrapper } from 'angular2/src/facade/collection' ;
4+ import { DateWrapper , Type , print } from 'angular2/src/facade/lang' ;
55import { NativeShadowDomStrategy } from 'angular2/src/render/dom/shadow_dom/native_shadow_dom_strategy' ;
66
77import { Parser , Lexer , DynamicChangeDetection } from 'angular2/change_detection' ;
@@ -25,41 +25,15 @@ import {getIntParameter, bindAction} from 'angular2/src/test_lib/benchmark_util'
2525import { ProtoViewFactory } from 'angular2/src/core/compiler/proto_view_factory' ;
2626import * as rc from 'angular2/src/render/dom/compiler/compiler' ;
2727
28- function setupReflector ( ) {
29- reflector . reflectionCapabilities = new ReflectionCapabilities ( ) ;
30-
31- reflector . registerGetters ( {
32- "inter0" : ( a ) => a . inter0 , "inter1" : ( a ) => a . inter1 ,
33- "inter2" : ( a ) => a . inter2 , "inter3" : ( a ) => a . inter3 , "inter4" : ( a ) => a . inter4 ,
34-
35- "value0" : ( a ) => a . value0 , "value1" : ( a ) => a . value1 ,
36- "value2" : ( a ) => a . value2 , "value3" : ( a ) => a . value3 , "value4" : ( a ) => a . value4 ,
37-
38- "prop" : ( a ) => a . prop
39- } ) ;
40-
41- reflector . registerSetters ( {
42- "inter0" : ( a , v ) => a . inter0 = v , "inter1" : ( a , v ) => a . inter1 = v ,
43- "inter2" : ( a , v ) => a . inter2 = v , "inter3" : ( a , v ) => a . inter3 = v , "inter4" : ( a , v ) => a . inter4 = v ,
44-
45- "value0" : ( a , v ) => a . value0 = v , "value1" : ( a , v ) => a . value1 = v ,
46- "value2" : ( a , v ) => a . value2 = v , "value3" : ( a , v ) => a . value3 = v , "value4" : ( a , v ) => a . value4 = v ,
47-
48- "attr0" : ( a , v ) => a . attr0 = v , "attr1" : ( a , v ) => a . attr1 = v ,
49- "attr2" : ( a , v ) => a . attr2 = v , "attr3" : ( a , v ) => a . attr3 = v , "attr4" : ( a , v ) => a . attr4 = v ,
50-
51- "prop" : ( a , v ) => a . prop = v
52- } ) ;
53- }
54-
5528export function main ( ) {
5629 BrowserDomAdapter . makeCurrent ( ) ;
5730 var count = getIntParameter ( 'elements' ) ;
5831
59- setupReflector ( ) ;
32+ reflector . reflectionCapabilities = new ReflectionCapabilities ( ) ;
6033 var reader = new DirectiveResolver ( ) ;
6134 var cache = new CompilerCache ( ) ;
62- var templateResolver = new FakeTemplateResolver ( ) ;
35+ var templateResolver = new MultipleTemplateResolver (
36+ count , [ BenchmarkComponentNoBindings , BenchmarkComponentWithBindings ] ) ;
6337 var urlResolver = new UrlResolver ( ) ;
6438 var styleUrlResolver = new StyleUrlResolver ( urlResolver ) ;
6539 var shadowDomStrategy = new NativeShadowDomStrategy ( styleUrlResolver ) ;
@@ -75,33 +49,34 @@ export function main() {
7549 renderCompiler ,
7650 new ProtoViewFactory ( new DynamicChangeDetection ( null ) )
7751 ) ;
78- var templateNoBindings = createTemplateHtml ( 'templateNoBindings' , count ) ;
79- var templateWithBindings = createTemplateHtml ( 'templateWithBindings' , count ) ;
52+
53+ function measureWrapper ( func , desc ) {
54+ return function ( ) {
55+ var begin = DateWrapper . now ( ) ;
56+ print ( `[${ desc } ] Begin...` ) ;
57+ var onSuccess = function ( _ ) {
58+ var elapsedMs = DateWrapper . toMillis (
59+ DateWrapper . now ( ) ) - DateWrapper . toMillis ( begin ) ;
60+ print ( `[${ desc } ] ...done, took ${ elapsedMs } ms` ) ;
61+ } ;
62+ PromiseWrapper . then ( func ( ) , onSuccess , null ) ;
63+ } ;
64+ }
8065
8166 function compileNoBindings ( ) {
82- templateResolver . setTemplateHtml ( templateNoBindings ) ;
8367 cache . clear ( ) ;
84- compiler . compile ( BenchmarkComponent ) ;
68+ return compiler . compile ( BenchmarkComponentNoBindings ) ;
8569 }
8670
8771 function compileWithBindings ( ) {
88- templateResolver . setTemplateHtml ( templateWithBindings ) ;
8972 cache . clear ( ) ;
90- compiler . compile ( BenchmarkComponent ) ;
73+ return compiler . compile ( BenchmarkComponentWithBindings ) ;
9174 }
9275
93- bindAction ( '#compileNoBindings' , compileNoBindings ) ;
94- bindAction ( '#compileWithBindings' , compileWithBindings ) ;
95- }
96-
97- function createTemplateHtml ( templateId , repeatCount ) {
98- var template = DOM . querySelectorAll ( document , `#${ templateId } ` ) [ 0 ] ;
99- var content = DOM . getInnerHTML ( template ) ;
100- var result = '' ;
101- for ( var i = 0 ; i < repeatCount ; i ++ ) {
102- result += content ;
103- }
104- return result ;
76+ bindAction ( '#compileNoBindings' ,
77+ measureWrapper ( compileNoBindings , 'No Bindings' ) ) ;
78+ bindAction ( '#compileWithBindings' ,
79+ measureWrapper ( compileWithBindings , 'With Bindings' ) ) ;
10580}
10681
10782@Directive ( {
@@ -152,24 +127,71 @@ class Dir4 {
152127 constructor ( dir3 :Dir3 ) { }
153128}
154129
155- @Component ( )
156- class BenchmarkComponent { }
130+ class MultipleTemplateResolver extends TemplateResolver {
131+ _multiple : num ;
132+ _cache : Map ;
157133
158- class FakeTemplateResolver extends TemplateResolver {
159- _template : View ;
160-
161- constructor ( ) {
134+ constructor ( multiple : num , components : List ) {
162135 super ( ) ;
136+ this . _multiple = multiple ;
137+ this . _cache = MapWrapper . create ( ) ;
138+ ListWrapper . forEach ( components , ( c ) => this . _warmUp ( c ) ) ;
163139 }
164140
165- setTemplateHtml ( html : string ) {
166- this . _template = new View ( {
167- template : html ,
168- directives : [ Dir0 , Dir1 , Dir2 , Dir3 , Dir4 ]
169- } ) ;
141+ _warmUp ( component : Type ) {
142+ var view = super . resolve ( component ) ;
143+ var multiplier = ListWrapper . createFixedSize ( this . _multiple ) ;
144+ for ( var i = 0 ; i < this . _multiple ; ++ i ) {
145+ multiplier [ i ] = view . template ;
146+ }
147+ MapWrapper . set ( this . _cache , component , ListWrapper . join ( multiplier , '' ) ) ;
170148 }
171149
172150 resolve ( component : Type ) : View {
173- return this . _template ;
151+ var view = super . resolve ( component ) ;
152+ var myView = new View ( {
153+ template : MapWrapper . get ( this . _cache , component ) ,
154+ directives : view . directives
155+ } ) ;
156+ return myView ;
174157 }
175158}
159+
160+ @Component ( )
161+ @View ( {
162+ directives : [ Dir0 , Dir1 , Dir2 , Dir3 , Dir4 ] ,
163+ template : `
164+ <div class="class0 class1 class2 class3 class4 " nodir0="" attr0="value0" nodir1="" attr1="value1" nodir2="" attr2="value2" nodir3="" attr3="value3" nodir4="" attr4="value4">
165+ <div class="class0 class1 class2 class3 class4 " nodir0="" attr0="value0" nodir1="" attr1="value1" nodir2="" attr2="value2" nodir3="" attr3="value3" nodir4="" attr4="value4">
166+ <div class="class0 class1 class2 class3 class4 " nodir0="" attr0="value0" nodir1="" attr1="value1" nodir2="" attr2="value2" nodir3="" attr3="value3" nodir4="" attr4="value4">
167+ <div class="class0 class1 class2 class3 class4 " nodir0="" attr0="value0" nodir1="" attr1="value1" nodir2="" attr2="value2" nodir3="" attr3="value3" nodir4="" attr4="value4">
168+ <div class="class0 class1 class2 class3 class4 " nodir0="" attr0="value0" nodir1="" attr1="value1" nodir2="" attr2="value2" nodir3="" attr3="value3" nodir4="" attr4="value4">
169+ </div>
170+ </div>
171+ </div>
172+ </div>
173+ </div>`
174+ } )
175+ class BenchmarkComponentNoBindings { }
176+
177+ @Component ( )
178+ @View ( {
179+ directives : [ Dir0 , Dir1 , Dir2 , Dir3 , Dir4 ] ,
180+ template : `
181+ <div class="class0 class1 class2 class3 class4 " dir0="" [attr0]="value0" dir1="" [attr1]="value1" dir2="" [attr2]="value2" dir3="" [attr3]="value3" dir4="" [attr4]="value4">
182+ {{inter0}}{{inter1}}{{inter2}}{{inter3}}{{inter4}}
183+ <div class="class0 class1 class2 class3 class4 " dir0="" [attr0]="value0" dir1="" [attr1]="value1" dir2="" [attr2]="value2" dir3="" [attr3]="value3" dir4="" [attr4]="value4">
184+ {{inter0}}{{inter1}}{{inter2}}{{inter3}}{{inter4}}
185+ <div class="class0 class1 class2 class3 class4 " dir0="" [attr0]="value0" dir1="" [attr1]="value1" dir2="" [attr2]="value2" dir3="" [attr3]="value3" dir4="" [attr4]="value4">
186+ {{inter0}}{{inter1}}{{inter2}}{{inter3}}{{inter4}}
187+ <div class="class0 class1 class2 class3 class4 " dir0="" [attr0]="value0" dir1="" [attr1]="value1" dir2="" [attr2]="value2" dir3="" [attr3]="value3" dir4="" [attr4]="value4">
188+ {{inter0}}{{inter1}}{{inter2}}{{inter3}}{{inter4}}
189+ <div class="class0 class1 class2 class3 class4 " dir0="" [attr0]="value0" dir1="" [attr1]="value1" dir2="" [attr2]="value2" dir3="" [attr3]="value3" dir4="" [attr4]="value4">
190+ {{inter0}}{{inter1}}{{inter2}}{{inter3}}{{inter4}}
191+ </div>
192+ </div>
193+ </div>
194+ </div>
195+ </div>`
196+ } )
197+ class BenchmarkComponentWithBindings { }
0 commit comments