У меня есть макет из двух столбцов, правый столбец - это списки с прокручиваемыми результатами с максимальным количеством результатов 200 элементов (в основном, только с установкой ul с overflow-y: scroll;
)
То, что я нахожу, заключается в том, что при прокрутке в правой колонке возникает некоторый jank (что особенно заметно на аппаратном уровне).
В хронологической шкале времени я могу увидеть некоторое большое "Дерево обновления слоя", пока я прокручиваю столбец. Есть ли способ понять, почему "Update Layer tree" настолько длинный и что свойства CSS влияют на скорость больше всего? Когда я нажимаю на него - просто дает мне информацию о том, как долго он побежал, и ничего больше.
У меня есть некоторый CSS в каждом из li, который не очень хорошо работает (например, фильтры, трансформирует, box-shadows и т.д.) - Если я удаляю каждый файл SASS один за другим, он улучшает производительность прокрутки (и в конечном итоге удаляет jank после удаления всего CSS), но, очевидно, его трудно определить, какие свойства css не выполняют этого.
Интересно, не потеряет ли что-нибудь что-то в хромированной шкале времени, которая может быть полезна в этом отношении?
Я попытался использовать свойство CSS will-change
для продвижения прокрутки к другому ускорению аппаратного обеспечения уровня/силы, но это не имеет большого значения.
Кроме того, во время прокрутки нет событий javascript.
Ограничение до менее 200 элементов не является вариантом.
У меня есть пример этого (я знаю его более длинный список элементов, но это только для демонстрационных целей): https://github.com/jooj123/jank/blob/master/scroll.html
Что действительно интересно, если я удаляю overflow-y: scroll;
(в .map-search__results в примере выше), прокрутка становится очень гладкой, а jank исчезает - почему это так сильно влияет?
Вот хромовая шкала времени (с в основном только длинными разделами "Обновление слоя" ):
Fix:
Пол отвечает о will-change: transform
на месте, в частности, этот лакомый кусочек помог:
"Добавить will-change: transform;. После добавления" repaints on scroll "rect исчез."
НО просто будьте осторожны, так как это обычно не применяется в зависимости от вашей базы кода, проверьте индикатор производительности прокрутки, чтобы убедиться, что "repaints on scroll" выключен, для меня мне также пришлось отключить свойство -webkit-clip-path
(в моем фактическая база кода - не в демонстрационной версии), которая была установлена в одном из дочерних div, см.: