From a4faa5cde722556bd41d75daf346c63a9b6962e9 Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Wed, 4 Jun 2014 08:16:04 -0700 Subject: [PATCH] perf(jqLite): don't use reflection to access expandoId Since we allow only one copy of Angular to be loaded at a time it doesn't make much sense randomly generate the expando property name and then be forced to use slow reflective calles to retrieve the IDs. --- src/jqLite.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/jqLite.js b/src/jqLite.js index a208ff82073f..e81406171d19 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -98,8 +98,9 @@ * @returns {Object} jQuery object. */ +JQLite.expando = 'ng'; + var jqCache = JQLite.cache = {}, - jqName = JQLite.expando = 'ng' + new Date().getTime(), jqId = 1, addEventListenerFn = (window.document.addEventListener ? function(element, type, fn) {element.addEventListener(type, fn, false);} @@ -309,7 +310,7 @@ function jqLiteOff(element, type, fn, unsupported) { } function jqLiteRemoveData(element, name) { - var expandoId = element[jqName], + var expandoId = element.ng, expandoStore = jqCache[expandoId]; if (expandoStore) { @@ -323,17 +324,17 @@ function jqLiteRemoveData(element, name) { jqLiteOff(element); } delete jqCache[expandoId]; - element[jqName] = undefined; // ie does not allow deletion of attributes on elements. + element.ng = undefined; // don't delete DOM expandos. IE and Chrome don't like it } } function jqLiteExpandoStore(element, key, value) { - var expandoId = element[jqName], + var expandoId = element.ng, expandoStore = jqCache[expandoId || -1]; if (isDefined(value)) { if (!expandoStore) { - element[jqName] = expandoId = jqNextId(); + element.ng = expandoId = jqNextId(); expandoStore = jqCache[expandoId] = {}; } expandoStore[key] = value;