Skip to content
Permalink
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
`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 #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.