Skip to content
This repository was archived by the owner on Feb 22, 2018. It is now read-only.

Commit 63c229c

Browse files
committed
feat(metadata extractor): Cache the fieldMetadataExtractor for greater performance
Dartium tests run in 7.6s; down from 18.2s. dart2js on Chrome runs in 2m instead of 3m
1 parent 2f186e4 commit 63c229c

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

lib/core/registry_dynamic.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ library angular.core_dynamic;
33
import 'dart:mirrors';
44
import 'package:angular/core/module_internal.dart';
55

6+
var _fieldMetadataCache = new Map<Type, Map<String, AttrFieldAnnotation>>();
7+
68
class DynamicMetadataExtractor implements MetadataExtractor {
79
final _fieldAnnotations = [
810
reflectType(NgAttr),
@@ -51,6 +53,10 @@ class DynamicMetadataExtractor implements MetadataExtractor {
5153

5254

5355
Map<String, AttrFieldAnnotation> fieldMetadataExtractor(Type type) {
56+
return _fieldMetadataCache.putIfAbsent(type, () => _fieldMetadataExtractor(type));
57+
}
58+
59+
Map<String, AttrFieldAnnotation> _fieldMetadataExtractor(Type type) {
5460
ClassMirror cm = reflectType(type);
5561
final fields = <String, AttrFieldAnnotation>{};
5662
cm.declarations.forEach((Symbol name, DeclarationMirror decl) {

0 commit comments

Comments
 (0)