From 63c229c7f7dab901e650fb1c8b155d2bc006ca30 Mon Sep 17 00:00:00 2001 From: James deBoer Date: Mon, 31 Mar 2014 15:56:24 -0700 Subject: [PATCH] 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 --- lib/core/registry_dynamic.dart | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/core/registry_dynamic.dart b/lib/core/registry_dynamic.dart index f0a76ddfd..bea0b4972 100644 --- a/lib/core/registry_dynamic.dart +++ b/lib/core/registry_dynamic.dart @@ -3,6 +3,8 @@ library angular.core_dynamic; import 'dart:mirrors'; import 'package:angular/core/module_internal.dart'; +var _fieldMetadataCache = new Map>(); + class DynamicMetadataExtractor implements MetadataExtractor { final _fieldAnnotations = [ reflectType(NgAttr), @@ -51,6 +53,10 @@ class DynamicMetadataExtractor implements MetadataExtractor { Map fieldMetadataExtractor(Type type) { + return _fieldMetadataCache.putIfAbsent(type, () => _fieldMetadataExtractor(type)); + } + + Map _fieldMetadataExtractor(Type type) { ClassMirror cm = reflectType(type); final fields = {}; cm.declarations.forEach((Symbol name, DeclarationMirror decl) {