Статьи

Автор: Мациевский Николай aka sunnybear
Опубликована: 7 июля 2008

Семантика проигрывает!

Логическим продолжением уже проведенных исследований CSS/DOM-производительности браузеров (часть 1, часть 2, часть 3) стало рассмотрение зависимости времени создания документа от числа тегов (узлов дерева). Раздельно анализировались случаи, когда DOM-дерево было чисто линейным (все div лежали прямо внутри body, когда оно было разветвленным (ветки по 10 вложенных div наращивались внутри body) и когда вместо ветки из div использовалась некоторая семантическая конструкция.

Методология

Методика измерения скорости создания документа не изменилась с предыдущих тестов, однако, было добавлено несколько уточнений:

  • Всего было 4 серии документов, которые загружались в скрытом iframe, и для которых замерялось время их создания: загрузочная, линейная, древовидная и семантическая. Загрузочная серия была точной копией линейной серии (в смысле загружаемых документов), но результаты ее прогона не сохранялись. Это связано с тем, что первые документы в серии измерений создавались немного дольше остальных (наверное, это связано с выделением памяти браузерами). Чтобы нивелировать этот эффект, вводились дополнительная серия перед всеми измерениями.
  • Также были замечены некоторые значительные флуктуации в первых прогонах всех серий экспериментов в отдельном браузере (время могло превосходить среднее значение на порядок, так называемые «3-дельта»-выбросы, больше всего напоминает кеширование браузером вычисленных деревьев). Чтобы избежать влияния на результаты этого явления, страница загружалась 3 раза перед проведение значащей серии измерений (10 загрузок для всех трех случаев).
  • В тестах дополнительно участвовали Firefox 3 и IE 8 (последний, правда, не повлиял не средневзвешенное значение, ибо доля его использования совершенна мизерна).

В качестве ветки семантического дерева использовалась следующая конструкция

<div><ul><li></li><li></li></ul>
<p><a href="#"><em></em></a><span></span></p><blockquote></blockquote>
<h1></h1></div>

Результаты

Скачать локальный архив или пройти тест онлайн можно здесь.

Результаты по браузерам

Firefox 2

Время создания документа от числа узлов (Firefox 2)

Firefox 3

Время создания документа от числа узлов (Firefox 3)

Internet Explorer 6

Время создания документа от числа узлов (Internet Explorer 6)

Internet Explorer 7

Время создания документа от числа узлов (Internet Explorer 7)

Internet Explorer 8 beta

Время создания документа от числа узлов (Internet Explorer 8 beta)

Opera 9.5

Время создания документа от числа узлов (Opera 9.5)

Safari 3.1

Время создания документа от числа узлов (Safari 3)

Средневзвешенное значение

Средневзвешенное значение времени создания документа от числа узлов в DOM-дереве

Выводы

Да, очевидно, что размер DOM-дерева влияет на скорость загрузки страницы. Одной из целью данного исследования было показать, как именно влияет (в конкретных числах). Средний размер страницы — 700–1000 элементов. Они загрузятся в дерево сравнительно быстро (3–7мс). Дальше время загрузки растет линейно, но все равно вы можете нарваться на нежелательные «тормоза», добавив несколько тысяч «скрытых» элементов или избыточной семантики.

Различия между линейной и древовидной структурой находятся в передах погрешности, однако, семантическое дерево оказалось самым медленным (чуть ли не на 50%). Но все же это явно не достаточный аргумент для полного отказа от семантики в коде. Да и уменьшение семантичности, скорее всего, будет связано с уменьшением числа элементов, так что лучше сосредоточиться именно на этом аспекте оптимизации (если уж вы беретесь за это).

Всем апологетам разумности хочу заявить: данное исследование несет чисто теоретический характер. Я не призываю высчитывать миллисекунды при создании страниц. Однако, иногда знать об этом нужно.

В дальнейшем планируется провести ряд исследований по отрисовке (reflow) различных комбинаций элементов и стилевых правил.

P.S. Как ни странно, но Opera проигрывает, а Safari опять опережает.

Читать дальше

Все комментарии (habrahabr.ru)