Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про CSS: css, performance

Почему использовать ::before/::after для 10k элементов эффективнее, чем добавлять DOM-узлы?

Вопрос проверяет понимание производительности при работе с псевдоэлементами CSS.

Короткий ответ

Псевдоэлементы (::before, ::after) не создают реальных DOM-узлов, а рендерятся браузером на уровне CSS. Это снижает нагрузку на DOM-дерево и ускоряет рендеринг.

Длинный ответ

Проблема с DOM-узлами:

  • Каждый из 10k элементов добавляется в DOM-дерево, что требует:

    • Выделения памяти.

    • Пересчета стилей и макета (reflow/repaint).

  • Пример:

    for (let i = 0; i < 10000; i++) {
      const div = document.createElement('div');
      div.textContent = 'Элемент ' + i;
      document.body.appendChild(div); // 10k новых узлов!
    }

Преимущества псевдоэлементов:

  1. Нет нагрузки на DOM:

    • Псевдоэлементы существуют только в CSSOM (CSS Object Model).

    • Браузер оптимизирует их отрисовку.

  2. Пример использования:

    .item::before {
      content: "•";
      margin-right: 5px;
    }

    Даже для 10k элементов с классом .item — всего один CSS-правило вместо 10k узлов.

Вывод:
Для декоративных элементов (иконки, маркеры) используйте ::before/::after вместо JavaScript/DOM.

Уровень

  • Рейтинг:

    1

  • Сложность:

    8

Навыки

  • CSS

    CSS

Ключевые слова

#css

#performance

Подпишись на React Developer в телеграм