$mol_list, $mol_row: scroll bar jumps
nin-jin opened this issue · 0 comments
nin-jin commented
Некоторые базовые компоненты реализуют стратегию ленивого рендеринга:
- Изначально рендерят столько, чтобы накрыть видимую область.
- По мере скролла вниз дорендеривают элементы, чтобы накрыть видимую область.
- По мере скролла вверх удаляют однозначно выходящие за область видимости элементы снизу, чтобы освободить память, не тратить ресурсы на их обновление и упростить браузеру обработку (layout на нескольких тысячах элементов может занимать секунды).
- Так как заранее предсказать размеры элементов в общем случае нельзя, используется оценка их размеров снизу: minimal_height и minimal_width. Это задаётся либо вручную, либо вычисляется из содержимого.
- Высота скроллящейся области устанавливается на основе оценки, но в процессе скролла (и фактического рендера элементов) оценка уточняется и высота скролла меняется, что приводит к скачкам скроллбара.
Какие есть альтернативы:
- Рендерить всё.
- Паджинация.
Оценим негативные последствия каждой альтернативы:
Ленивый рендеринг.
- Пользователь с особо трепетным отношением к скроллбару, заметит скачки и будет раздражён.
- Пользователь десктопного браузера, который не пользуется колёсиком мыши, схватится за скроллбар и не сможет доскроллить куда надо за один рывок, так как скроллбар возможно отскочит. Он испытает неудобство от того, что скроллинг на дальнее расстояние приходится совершать с несколькими перехватами скроллбара.
Уровень негатива: ❌
Полный рендеринг
- Любой пользователь может не дождаться отображения экрана проклянуть всё на свете и уйти, если данных внезапно оказалось больше, чем позволяет быстро отобразить его девайс.
- Любой пользователь будет испытывать дискомфорт от постоянных тормозов, если данных внезапно оказалось больше, чем способен обработать его девайс за 16мс.
Уровень негатива: ❌❌❌❌❌
Паджинация
- Любой пользователь будет вырываться из потока обработки информации для переключения страниц.
- Любой пользователь будет терять контекст (соседние элементы) при переходе между страницами, что потребует переключения туда-сюда, для восстановления контекста (например, ему нужно понять в чём разница между элементами).
- Любой пользователь будет испытывать трудности с дрегендропом между страницами. В лучшем случае ему придётся тащить сначала на номер страницы, а потом в нужное место.
Уровень негатива: ❌❌❌