Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Проблема
Пользуясь страницей обнаружил что она сильно просаживет производительность.
Решение
Оптимизировать скрипт flashWord.
Результаты
Frame Rate на CPU 6x Slowdown throttle на старом коде
Frame Rate на CPU 6x Slowdown throttle на новом коде
Замер производительности во вкладке Performance Monitor
Стрелкой указана точка перезагрузки страницы с новым кодом.
Как видно на графике, использование CPU снизилось c ~30-50% до ~3-10%
Что было сделано
Вместо текущей логики скрипта который в реалтайме регулярным выражением искал слова и заменял все содержимое innerHtml элемента
.index-seo
, принял решение сначала выделить все уникальные слова, обернуть их в уникальный className и составить ассоциативный словарь для быстрого доступа к этим элементам.Далее принцип тот же, в бесконечном цикле получаем ссылку на уже готовый список нод с одинаковыми словами и меняем им только свойство style. Это позволяет браузеру не перерисовывать весь элемент, а только те ноды стили которых меняются.
Пример paint flashing как было до:
Пример paint flashing как стало после: