между текущим и пиннед. А если их тысячи?
опять-таки - зависит от реализации хранения отдельно, показа отдельно.
Как это, хранение отдельно, показ отдельно?
данные хранятся, к примеру, в редаксе. Отрисовывает компонент, ему же передаётся текущая позиция. Функция компонента при скролле диспатчит экшн типа "проверить, есть ли данные в стейте для текущей позиции". Экшн проверяет, если нет - шлёт запрос на сервер. Результат отправляет в стейт, компонент ререндерится
Это понятно. Вот сейчас у нас текущее сообщение, последнее. Мы нажали на пиннед. Она находится на 10000 сообщений раньше.
подгружается "окно" в +- несколько сообщений относительно пина. это и в телеге заметно, когда пин старый, после перехода при прокрутке сообщения догружаются из хранилища, если его нет - с бэка
А как они скролл сразу справа показывают такой маленький, как будто сразу все загрузилось?
в телеге - скролл относительно подгруженных данных плюс примерный рассчёт высоты от текущей позиции и вниз относительно количества сообщений от текущего до последнего.
ещё возможно делать скролл относительно общего количества сообщений
для этого надо высоту каждого сообщения считать. Или нет?
сообщения же могут быть разной высоты. Как-то не улавливаю
зачем каждого считать? бери высоту одно- или двухстрочного сообщения - этого хватит ))
вообще вот неплохая статья на тему виртуализации списков https://medium.com/ingeniouslysimple/building-a-virtualized-list-from-scratch-9225e8bec120 а оттуда уже можно глубже копать
хорошая статья для основы 👍
Обсуждают сегодня