Веб-браузер DOM существует с конца 90-х годов, но он остается одним из самых больших ограничений производительности/скорости.
У нас есть одни из самых ярких в мире умов от Google, Mozilla, Microsoft, Opera, W3C и других организаций, работающих над веб-технологиями для всех нас, поэтому, очевидно, это не просто "О, мы не сделали", t оптимизировать его ".
Мой вопрос, если я буду работать над той частью веб-браузера, которая специально занимается этим, почему мне так сложно заставить его работать быстрее?
Мой вопрос не с запросом what заставляет его медленно, он спрашивает why не стало быстрее?
Это похоже на то, что происходит в другом месте, например, JS-двигатели с производительностью, близкой к коду С++.
Пример быстрого script:
for (var i=0;i<=10000;i++){
someString = "foo";
}
Пример медленного из-за DOM:
for (var i=0;i<=10000;i++){
element.innerHTML = "foo";
}
Некоторые детали по запросу:
После заметок на стенде, похоже, что это не неразрешимая медленная проблема, но часто используется неправильный инструмент, и используемый инструмент зависит от того, что вы делаете в кросс-браузере.
Похоже, что эффективность DOM сильно варьируется между браузерами, но моя первоначальная презумпция того, что dom медленная и неразрешимая, кажется, ошибочна.
Я запускал тесты против Chrome, FF4 и IE 5-9, вы можете видеть операции в секунду в этой диаграмме:
Chrome работает быстро, когда вы используете DOM API, но значительно медленнее, используя оператор .innerHTML(на 1000 раз медленнее), однако FF хуже, чем Chrome в некоторых областях (например, тест append гораздо медленнее, чем Chrome), но тест InnerHTML работает намного быстрее, чем хром.
Кажется, что IE действительно ухудшается при использовании DOM append и лучше в InnerHTML, когда вы продвигаетесь через версии начиная с версии 5.5 (т.е. 73OP/сек в IE8 теперь на 51 ops/sec в IE9).
У меня есть тестовая страница здесь:
http://jsperf.com/browser-dom-speed-tests2
Интересно, что кажется, что разные браузеры кажутся разными проблемами при создании DOM. Почему здесь существует такое несоответствие?