Mitigation techniques for Internet Explorer DOM insertion speed

Viewed 221

I have a menu with custom drop downs that can contain thousands of items. This is the worse case scenario and most of the time it's in the hundreds or less and it's all super fast.

I've delayed the insertion of the elements (li) to when the menu is opened but this causes a perceptible delay for a couple seconds when it's clicked to when it's opened.

I build a string of all the list items in javascript and add it using a single innerHtml assignment. It's the innerHtml assignment that takes all the time. I've also tried using a fragment and appending to that as well as using a fragment and appending each item separately all to no avail. Insertion times are below:

        Text  Li/InnerHTML  Li/Inner/Fragment  CreateLI/Fragment
Chrome  13ms      40ms            48ms               138ms

IE9     22ms      2402ms          2364ms             7934ms

IE11    19ms      1952ms          2330ms             4208ms

First column is inserting all the content but just as text and new lines inside pre tags in a single innerHTML call. Unfortunately li's are needed for styling and events ect.

Second column is adding all the content but each wrapped in li tags in a single innerHTML call.

Third column as above but using a fragment and then appending that.

Forth column as above but each li is added as a separate create and append to the fragment.

Unfortunately IE (We are moving to IE11 around xmas) is the target browser - corporate intranet :-(

One thing I've tried to mitigate this is to just insert the first, say 50 items. So opening the menu is fast but on scroll, I have to load subsequent items again in batches of 50 up to the scroll point. IE isn't fast enough so most of the time you are seeing nothing and when dragging the scroll bar it keeps locking, jumping forward, locking ect because the innerHTML calls block the whole browser when you're trying to scroll.

Another technique I've tried is to insert the first 50 items, and then load the remaining in 50 chunks with intervals of say 50ms to not block everything. Unfortunately this leads to an even worse experience because the page responsiveness stutters like it does when scrolling in the previous example, but here you don't even have to be scrolling, it always does it until all the items are added.

I'm out of idea's now. How can I make IE work faster?

1 Answers
Related