Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Performance fix #3

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open

Conversation

lapkoshka
Copy link

Проблема
Пользуясь страницей обнаружил что она сильно просаживет производительность.

Решение
Оптимизировать скрипт flashWord.

Результаты
Frame Rate на CPU 6x Slowdown throttle на старом коде
2022-04-15 20 45 46

Frame Rate на CPU 6x Slowdown throttle на новом коде
2022-04-15 20 45 51

Замер производительности во вкладке Performance Monitor
2022-04-15 20 47 40
Стрелкой указана точка перезагрузки страницы с новым кодом.

Как видно на графике, использование CPU снизилось c ~30-50% до ~3-10%

Что было сделано
Вместо текущей логики скрипта который в реалтайме регулярным выражением искал слова и заменял все содержимое innerHtml элемента .index-seo, принял решение сначала выделить все уникальные слова, обернуть их в уникальный className и составить ассоциативный словарь для быстрого доступа к этим элементам.

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

Пример paint flashing как было до:
image

Пример paint flashing как стало после:
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants