Skip to content
Browse files

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

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 #15344
  • Loading branch information...
klieber authored and petebacondarwin committed Nov 1, 2016
1 parent 551983e commit e269ad1244bc50fee9218f7c18fab3e9ab063aab
Showing with 1 addition and 1 deletion.
  1. +1 −1 src/ng/directive/ngOptions.js
@@ -624,7 +624,7 @@ var ngOptionsDirective = ['$compile', '$document', '$parse', function($compile,
element.label = option.label;
element.textContent = option.label;
if (option.value !== element.value) element.value = option.selectValue;
element.value = option.selectValue;

function updateOptions() {

0 comments on commit e269ad1

Please sign in to comment.
You can’t perform that action at this time.