Skip to content

Commit 866a135

Browse files
klieberellimist
authored andcommitted
perf(ngOptions): avoid calls to element.value
In some cases IE11/Edge calls to `element.value` are very slow when the `element.value` has not been set. Normally, these calls are usualy 0-3 ms but in these cases it can take 200-300 ms. This can easily add 3 or more seconds to the load time on a view that has 10 or more select tags using `ngOptions`. The line this pull request is changing not only suffers from the performance issue described above but it also appears to be broken. The code is checking that `option.value` does not equal `element.value` but then sets `element.value` to `option.selectValue`. I don't believe `option.value` is actually defined anywhere and likely it was always intended to be `option.selectValue`. This means that check would always be true and since this code has been this way for quite a while and is causing a performance issue I've just removed the check. This way a call to `element.value` is never made prior to it's value being set. Closes angular#15344
1 parent 9654d7a commit 866a135

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

src/ng/directive/ngOptions.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,7 @@ var ngOptionsDirective = ['$compile', '$document', '$parse', function($compile,
591591
element.label = option.label;
592592
element.textContent = option.label;
593593
}
594-
if (option.value !== element.value) element.value = option.selectValue;
594+
element.value = option.selectValue;
595595
}
596596

597597
function updateOptions() {

0 commit comments

Comments
 (0)