Производительность рендеринга: атрибуты стиля или имена классов и правила таблицы стилей? - PullRequest
5 голосов
/ 22 ноября 2010

Я создаю визуализацию данных, и производительность рендеринга имеет решающее значение.Мой вопрос будет относиться к болотному стандарту HTML, хотя я использую SVG с JavaScript.

ОК, гипотетический сценарий: скажем, у меня 10000 узлов DOM с background-color из "red"и 10000 узлов DOM с background-color из" green ".Каждый узел создается циклом JavaScript.Я мог бы либо:

  1. установить атрибут style на каждом узле, указав background-color узла: <element style="background-color:red;"/>
  2. установить атрибут classна каждом узле, а затем ссылаться на этот класс во встроенном стиле или во внешней таблице стилей:

    <head><style>.foo {background-color:red;}</style></head>

    <body><element class="foo"/></body>

Производительность загрузка код здесь совсем не важен - меня интересует только производительность рендеринга в браузере.Я также прекрасно понимаю, что атрибуты стиля обычно не так полезны или семантичны в повседневной разработке веб-сайтов, но у меня есть конкретный пример использования.

I am , интересующийсялогичные ответы, но было бы очень полезно услышать, что кто-то действительно проверял это или читал о чужих тестах (я искал информацию, но ничего конкретно не нашел по этому вопросу).

Спасибо за вашу помощь!

Ответы [ 4 ]

3 голосов
/ 23 мая 2011

Я создал тест производительности для этого: http://jsperf.com/style-element-vs-attr

Исходя из начальных тестов в Firefox и Chrome, создается впечатление, что в три раза быстрее создаются и отображаются элементы, использующие classNames, а не атрибуты стиля. Я был очень удивлен этим - я не был уверен, но ожидал обратного.

2 голосов
/ 22 ноября 2010

Я был бы чрезвычайно удивлен, если бы существовала значительная разница (и даже более удивленная, если бы она когда-либо имела значение), но если бы она была, она была бы в IE, так что сравните это.

Тем не менее, условия, которые вы тестируете, являются настолько крайним случаем, что я не думаю, что вы должны злоупотреблять своей разметкой, чтобы добиться небольшого или незначительного выигрыша в производительности в случае, если встроенное было быстрее. CSS на основе классов неизмеримо лучше для целей разработки, обслуживания и семантики, и вы должны избегать встроенных стилей любой ценой.

0 голосов
/ 25 ноября 2016

После сравнения результатов я остановлюсь на использовании решений CSS-in-JS, я пробовал много и, наконец, использовал эту библиотеку:

https://github.com/cssobj/cssobj

Это создатьи обновите CSS-правила из JS, и он будет небольшого размера.

0 голосов
/ 22 ноября 2010

Если вы говорите, что каждый узел создается в цикле JavaScript, разве это уже не требует производительности браузера (JavaScript Engine)?

Почему-то мне было бы немного удобнее устанавливать цвета с помощью JavaScriptсам.Скажем, $(this).css('color','red'); вместо добавления класса, который затем требует, чтобы браузер просматривал вычисленные стили, доступные во время выполнения сценария, а затем отображал / повторно отображал изменение цвета.

Я не уверен, полностью ли я прав, просто мнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...