hyoo-ru/mam_mol

$mol_list, $mol_row: scroll bar jumps

nin-jin opened this issue · 0 comments

Некоторые базовые компоненты реализуют стратегию ленивого рендеринга:

  1. Изначально рендерят столько, чтобы накрыть видимую область.
  2. По мере скролла вниз дорендеривают элементы, чтобы накрыть видимую область.
  3. По мере скролла вверх удаляют однозначно выходящие за область видимости элементы снизу, чтобы освободить память, не тратить ресурсы на их обновление и упростить браузеру обработку (layout на нескольких тысячах элементов может занимать секунды).
  4. Так как заранее предсказать размеры элементов в общем случае нельзя, используется оценка их размеров снизу: minimal_height и minimal_width. Это задаётся либо вручную, либо вычисляется из содержимого.
  5. Высота скроллящейся области устанавливается на основе оценки, но в процессе скролла (и фактического рендера элементов) оценка уточняется и высота скролла меняется, что приводит к скачкам скроллбара.

Какие есть альтернативы:

  1. Рендерить всё.
  2. Паджинация.

Оценим негативные последствия каждой альтернативы:

Ленивый рендеринг.

  • Пользователь с особо трепетным отношением к скроллбару, заметит скачки и будет раздражён.
  • Пользователь десктопного браузера, который не пользуется колёсиком мыши, схватится за скроллбар и не сможет доскроллить куда надо за один рывок, так как скроллбар возможно отскочит. Он испытает неудобство от того, что скроллинг на дальнее расстояние приходится совершать с несколькими перехватами скроллбара.

Уровень негатива: ❌

Полный рендеринг

  • Любой пользователь может не дождаться отображения экрана проклянуть всё на свете и уйти, если данных внезапно оказалось больше, чем позволяет быстро отобразить его девайс.
  • Любой пользователь будет испытывать дискомфорт от постоянных тормозов, если данных внезапно оказалось больше, чем способен обработать его девайс за 16мс.

Уровень негатива: ❌❌❌❌❌

Паджинация

  • Любой пользователь будет вырываться из потока обработки информации для переключения страниц.
  • Любой пользователь будет терять контекст (соседние элементы) при переходе между страницами, что потребует переключения туда-сюда, для восстановления контекста (например, ему нужно понять в чём разница между элементами).
  • Любой пользователь будет испытывать трудности с дрегендропом между страницами. В лучшем случае ему придётся тащить сначала на номер страницы, а потом в нужное место.

Уровень негатива: ❌❌❌