perf($animate): access DOM less in resolveElementClasses

Previously we were reading DOM attributes frequently, now we can do it just once.
This commit is contained in:
Caitlin Potter
2014-10-08 14:34:26 -04:00
parent 003c44ecee
commit 22358cf9c7
2 changed files with 13 additions and 2 deletions

View File

@@ -102,8 +102,14 @@ var $AnimateProvider = ['$provide', function($provide) {
function resolveElementClasses(element, cache) {
var toAdd = [], toRemove = [];
var hasClasses = createMap();
forEach((element.attr('class') || '').split(/\s+/), function(className) {
hasClasses[className] = true;
});
forEach(cache.classes, function(status, className) {
var hasClass = jqLiteHasClass(element[0], className);
var hasClass = hasClasses[className];
// If the most recent class manipulation (via $animate) was to remove the class, and the
// element currently has the class, the class is scheduled for removal. Otherwise, if

View File

@@ -477,9 +477,14 @@ angular.module('ngAnimate', ['ng'])
});
});
var hasClasses = Object.create(null);
forEach((element.attr('class') || '').split(/\s+/), function(className) {
hasClasses[className] = true;
});
var toAdd = [], toRemove = [];
forEach(cache.classes, function(status, className) {
var hasClass = angular.$$hasClass(element[0], className);
var hasClass = hasClasses[className] === true;
var matchingAnimation = lookup[className] || {};
// When addClass and removeClass is called then $animate will check to