Веб-версияОткрыть в Telegram

ПостinnerText vs textContent — как обычное чтение DOM может заставить браузер пересчитать layout!

20 августа 2026
C
Code Ready | Frontend
innerText vs textContent — как обычное чтение DOM может заставить браузер пересчитать layout! DOM хранит структуру документа отдельно от того, как эта структура отображается пользователю. textContent работает на уровне DOM-дерева. Он проходит по текстовым узлам и собирает содержимое без анализа CSS, размеров элементов или текущего состояния отображения. const text = element.textContent; innerText работает иначе. Чтобы вернуть текст в том виде, в котором его видит пользователь, браузеру необходимо учитывать CSS, видимость элементов, переносы строк и актуальное состояние компоновки. const text = element.innerText; Именно поэтому простое чтение свойства иногда может быть дорогой операцией: element.style.width = '400px'; const text = element.innerText; После изменения стиля браузер помечает компоновку как устаревшую. Если следующая операция требует данных о визуальном состоянии страницы, браузеру может потребоваться немедленно выполнить перерасчёт. Это называется принудительным синхронным перерасчётом layout. Похожий механизм работает с другими свойствами, зависящими от текущей геометрии страницы: element.style.width = '400px'; const width = element.offsetWidth; К этой же категории относятся offsetHeight, getBoundingClientRect() и чтение некоторых свойств прокрутки (scrollTop, scrollHeight и другие). Проблема обычно появляется не из-за одного вызова, а из-за постоянного смешивания операций записи и чтения: elements.forEach(element => { element.style.width = '400px'; console.log(element.innerText); }); В таком случае браузер может постоянно выполнять цикл: запись — устаревшая компоновка — чтение — расчёт компоновки. Это приводит к частым лишним перерасчётам компоновки (layout thrashing). Гораздо эффективнее разделять изменение состояния и чтение данных: elements.forEach(element => { element.style.width = '400px'; }); const values = elements.map( element => element.innerText ); Важно понимать: innerText не является медленным сам по себе. Если состояние компоновки уже актуально, чтение может быть дешёвым. Проблема возникает тогда, когда браузеру приходится синхронизировать DOM с текущим визуальным состоянием страницы. Если нужно получить данные из DOM, обычно достаточно textContent. Если нужен текст именно в том виде, в котором его воспринимает пользователь, используется innerText. 🔥 Разница между ними не только в возвращаемой строке. textContent работает с моделью документа, а innerText — с моделью отображения. В производительных интерфейсах это различие может определить, будет ли чтение обычным получением текстового содержимого или причиной перерасчёта компоновки. 📣 Code Ready | #практика
26 · 1.6K ·

Рядом в ленте

CCode Ready | Frontend📱 Intersection Observer API — отслеживание видимости элементов! В этой шпаргалке собраны основные методы и свойства Intersection Observer API для асинхронного оCCode Ready | Frontend👩‍💻 Связываем подпись с полем формы с помощью атрибута for! Атрибут for используется у тега <label> и указывает, к какому элементу формы относится подпись. А ещ
это сообщение
CCode Ready | FrontendПопалась супер интересная статья на Хабре: «Как я собрал сайт на 30 000 SEO-страниц за месяц»! В этой статье: • Показывается, как в одиночку с помощью Claude и CCode Ready | FrontendЧто фронтенд может, а что не может, когда лёг хостинг Недавно натыкался на новость — у одного из хостеров случился короткий сбой на уровне энергоснабжения дата-
CCode Ready | FrontendCode Ready | Frontend@code_ready · канал · Технологии
21 660подписчиков1 634средний охват поста
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем