TGViewer
Дивовижний світ веброзробки Дивовижний світ веброзробки @babichdev · 2.91K subscribers
Post #118 2.04K
#browser_api
Ви коли-небудь відкривали вебінспектор для підсвіченого коду на тому ж GitHub? Якщо так, то бʼюся об заклад, що ви бачили щось таке:

<span class="blob-code-inner blob-code-marker " data-code-marker=" ">
<span class="pl-s1">llm_type</span>
<span class="pl-c1">=</span>
<span class="pl-s1">fields</span>
.
<span class="pl-c1">ChoiceField</span>
(
</span>


Навіть простий рядок перетворюється на суп, щедро приправлений спанами. Як наслідок: смертельная гангрена купа додаткових вузлів, що захаращують DOM і можуть призвести до суттєвих просадок швидкодії сторінки.

Але прийшов час радіти, бо тихо й непомітно зʼявилася специфікація Custom Highlight API, яка дозволяє розцяцьковувати текст на будь-який смак, не перевантажуючи сторінку оркестром диких span!

Тепер можна просто реєструвати Highlight, в який можна передати декілька діапазонів Range з позиціями, і вказувати стилі — усе без змін розмітки, завдяки CSS псевдоелементу ::highlight.

const range = new Range();
range.setStart(node, startOffset);
range.setEnd(node, endOffset);

const highlight = new Highlight(range);
CSS.highlights.set('myHighlight', highlight);


::highlight(myHighlight) {
background-color: yellow;
}


І все. По суті, бравзер повністю забирає на себе побудову дерева стилів для масиву тексту, переносячи те, для що потребувало фактичного DOM-піддерева, у віртуальну структуру, приховану від сторонніх очей.

І нам лишається лише розпарсити текст на токени й описати яким діапазонам які стилі призначені.

Концептуально, звісно, суттєво нічого не змінилося — бравзеру так само необхідно надати інформацію, які послідовності символів як розмальовувати. Але замість повноважного DOM-дерева тепер для цього є швидка in-memory структура. А це, очевидно, позитивно впливає на продуктивність самої сторінки.

🌐 MDN: CSS Custom Highlight API

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

До речі, поділіться своїми думками, де би ця фіча стала в нагоді саме вам.

@babichdev
  • ❤ 34
  • 🔥 14
More from @babichdev
  1. Sep 30, 2026Товариство, запрошую вас цієї суботи, 3 жовтня, на Fwdays Tech Summit — онлайн конференцію…
  2. Sep 28, 2026#збір_на_авто_для_21 Товариство, почнімо тиждень з доброго діла. Я би дуже хотів, аби ми ц…
  3. Sep 27, 2026Знайшов своє старезне резюме. Аж пустив скупу сльозу за тими часами, коли навіть з таким м…
  4. Sep 25, 2026Днями на редіті побачив допис, в якому автор питав, чому його лічильник часу на сторінці з…
  5. Sep 23, 2026Який ШІ найкращий для навчання? Відповідь проста — той, з яким ви чогось навчились. ШІ це…
  6. Sep 18, 2026Оце я, канєшна, провтикав. Конфа завтра, 19 вересня. Ще встигаєте взяти квиточок.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →