| OLD | NEW |
| (Empty) | |
| 1 library parser_perf; |
| 2 |
| 3 import '_perf.dart'; |
| 4 import 'package:angular/core/module.dart'; |
| 5 import 'package:angular/core/parser/parser_library.dart'; |
| 6 import 'package:angular/filter/module.dart'; |
| 7 import 'package:di/di.dart'; |
| 8 import 'package:di/dynamic_injector.dart'; |
| 9 import 'package:intl/intl.dart'; |
| 10 |
| 11 import '../gen/generated_functions.dart' as generated_functions; |
| 12 import '../gen/generated_getter_setter.dart' as generated_getter_setter; |
| 13 |
| 14 main() { |
| 15 var module = new Module() |
| 16 ..type(Parser, implementedBy: DynamicParser) |
| 17 ..type(SubstringFilter) |
| 18 ..type(IncrementFilter) |
| 19 ..install(new NgFilterModule()); |
| 20 var injector = new DynamicInjector( |
| 21 modules: [module], |
| 22 allowImplicitInjection:true); |
| 23 var scope = injector.get(Scope); |
| 24 var reflectiveParser = injector.get(Parser); |
| 25 var filterMap = injector.get(FilterMap); |
| 26 |
| 27 var generatedParser = new DynamicInjector( |
| 28 modules: [new Module() |
| 29 ..type(Parser, implementedBy: StaticParser) |
| 30 ..value(StaticParserFunctions, generated_functions.functions(filterMap))
], |
| 31 allowImplicitInjection:true).get(Parser); |
| 32 |
| 33 var hybridParser = new DynamicInjector( |
| 34 modules: [new Module() |
| 35 ..type(Parser, implementedBy: DynamicParser) |
| 36 ..type(GetterSetter, implementedBy: generated_getter_setter.StaticGetter
Setter)], |
| 37 allowImplicitInjection:true).get(Parser); |
| 38 |
| 39 scope['a'] = new ATest(); |
| 40 scope['e1'] = new EqualsThrows(); |
| 41 scope['o'] = new OTest(); |
| 42 |
| 43 compare(expr, idealFn) { |
| 44 var nf = new NumberFormat.decimalPattern(); |
| 45 var reflectionExpr = reflectiveParser(expr); |
| 46 var generatedExpr = generatedParser(expr); |
| 47 var hybridExpr = hybridParser(expr); |
| 48 var measure = (b) => statMeasure(b).mean_ops_sec; |
| 49 var gTime = measure(() => generatedExpr.eval(scope)); |
| 50 var rTime = measure(() => reflectionExpr.eval(scope)); |
| 51 var hTime = measure(() => hybridExpr.eval(scope)); |
| 52 var iTime = measure(() => idealFn(scope)); |
| 53 print('$expr => g: ${nf.format(gTime)} ops/sec ' + |
| 54 'r: ${nf.format(rTime)} ops/sec ' + |
| 55 'h: ${nf.format(hTime)} ops/sec ' + |
| 56 'i: ${nf.format(iTime)} ops/sec = ' + |
| 57 'i/g: ${nf.format(iTime / gTime)} x ' + |
| 58 'i/r: ${nf.format(iTime / rTime)} x ' + |
| 59 'i/h: ${nf.format(iTime / hTime)} x ' + |
| 60 'g/h: ${nf.format(gTime / hTime)} x ' + |
| 61 'h/r: ${nf.format(hTime / rTime)} x ' + |
| 62 'g/r: ${nf.format(gTime / rTime)} x'); |
| 63 } |
| 64 |
| 65 compare('a.b.c', (scope) => scope['a'].b.c); |
| 66 compare('e1.b', (scope) => scope['e1'].b); |
| 67 compare('o.f()', (scope) => scope['o'].f()); |
| 68 compare('null', (scope) => null); |
| 69 compare('x.b.c', (s, [l]) { |
| 70 if (l != null && l.containsKey('x')) s = l['x']; |
| 71 else if (s != null ) s = s is Map ? s['x'] : s.x; |
| 72 if (s != null ) s = s is Map ? s['b'] : s.b; |
| 73 if (s != null ) s = s is Map ? s['c'] : s.c; |
| 74 return s; |
| 75 }); |
| 76 compare('doesNotExist', (scope) => scope['doesNotExists']); |
| 77 } |
| 78 |
| 79 |
| 80 class ATest { |
| 81 var b = new BTest(); |
| 82 } |
| 83 |
| 84 class BTest { |
| 85 var c = 6; |
| 86 } |
| 87 |
| 88 class OTest { |
| 89 f() => 42; |
| 90 } |
| 91 |
| 92 class EqualsThrows { |
| 93 var b = 3; |
| 94 operator ==(x) { |
| 95 try { |
| 96 throw "no"; |
| 97 } catch (e) { |
| 98 return false; |
| 99 } |
| 100 } |
| 101 } |
| 102 |
| 103 @NgFilter(name:'increment') |
| 104 class IncrementFilter { |
| 105 call(a, b) => a + b; |
| 106 } |
| 107 |
| 108 @NgFilter(name:'substring') |
| 109 class SubstringFilter { |
| 110 call(String str, startIndex, [endIndex]) { |
| 111 return str.substring(startIndex, endIndex); |
| 112 } |
| 113 } |
| 114 |
| OLD | NEW |