From 3410f65e790a81d457b4f4601a1e760a6f8ede5e Mon Sep 17 00:00:00 2001 From: Michał Gołębiowski Date: Wed, 16 Oct 2013 15:15:21 +0200 Subject: perf(jqLite): implement and use the `empty` method in place of `html(‘’)` jQuery's elem.html('') is way slower than elem.empty(). As clearing element contents happens quite often in certain scenarios, switching to using .empty() provides a significant performance boost when using Angular with jQuery. Closes #4457 --- src/ng/compile.js | 4 ++-- src/ng/directive/ngTransclude.js | 2 +- src/ng/directive/select.js | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/ng') diff --git a/src/ng/compile.js b/src/ng/compile.js index a6bcc3e7..0af76a75 100644 --- a/src/ng/compile.js +++ b/src/ng/compile.js @@ -1219,7 +1219,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { }); } else { $template = jqLite(jqLiteClone(compileNode)).contents(); - $compileNode.html(''); // clear contents + $compileNode.empty(); // clear contents childTranscludeFn = compile($template, transcludeFn); } } @@ -1651,7 +1651,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { ? origAsyncDirective.templateUrl($compileNode, tAttrs) : origAsyncDirective.templateUrl; - $compileNode.html(''); + $compileNode.empty(); $http.get($sce.getTrustedResourceUrl(templateUrl), {cache: $templateCache}). success(function(content) { diff --git a/src/ng/directive/ngTransclude.js b/src/ng/directive/ngTransclude.js index 490ea21f..8eefb6ff 100644 --- a/src/ng/directive/ngTransclude.js +++ b/src/ng/directive/ngTransclude.js @@ -69,7 +69,7 @@ var ngTranscludeDirective = ngDirective({ link: function($scope, $element, $attrs, controller) { controller.$transclude(function(clone) { - $element.html(''); + $element.empty(); $element.append(clone); }); } diff --git a/src/ng/directive/select.js b/src/ng/directive/select.js index 86e04242..d87fa5d3 100644 --- a/src/ng/directive/select.js +++ b/src/ng/directive/select.js @@ -333,13 +333,13 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { // becomes the compilation root nullOption.removeClass('ng-scope'); - // we need to remove it before calling selectElement.html('') because otherwise IE will + // we need to remove it before calling selectElement.empty() because otherwise IE will // remove the label from the element. wtf? nullOption.remove(); } // clear contents, we'll add what's needed based on the model - selectElement.html(''); + selectElement.empty(); selectElement.on('change', function() { scope.$apply(function() { -- cgit v1.2.3