Прошлые домены не функционирует! Используйте адрес
ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна.
Подробности случившегося. Мы призываем всех неравнодушных
помочь нам с восстановлением утраченного контента!
Брал паузу, отдыхал.
Лето, туда-сюда.
А тем временем я реализовал тот самый "стриминг" сообщений, про который писал ранее.
https://github.com/catamphetamine/virtual-scroller
Непростая задача была.
Выкачен на сайте: https://catamphetamine.github.io/chanchan/
Если открыть DevTools, то можно увидеть, что рендерится "обманка": только несколько сообщений из всего списка ~500 сообщений, которые попадают в экран, а остальное — padding-top и padding-bottom.
При скроллинге это всё подменяется в режиме "кручу-верчу, следите за руками".
Как результат, рендеринг всего списка сообщений теперь не занимает секунду или более на современных настольных CPU.
Вторым фактором был парсинг сообщений — оказалось, что это тоже долго.
Использовав встроенный в Хром "профайлер" увидел узкие места и кое-где кое-чего оптимизировал, плюс со стримингом теперь парсятся не все 500 сообщений сразу, а только те, которые видны.
Итог: аниме-тред на 2500 сообщений теперь не виснет на 5-10 секунд, а парсится за 50 миллисекунд и рендерится так же быстро.
Ещё одна сложность была в том, чтобы правильно обновлять высоту элементов списка: всё достаточно просто, когда элементы списка не растут по высоте, но в данном случае можно нажать "Показать ответы", после чего высоты переизмерятся.
К тому же, React не сохраняет компонент, когда он уже не виден, поэтому возникла ещё одна задача: сохранять state где-то, и потом, когда сообщение снова видно — восстанавливать этот state: всё древо раскрытых комментариев, и состояния для каждого из сообщений этого древа ("Показать текст полностью").
В общем, рекурсия на рекурсии, но я смог.
За кадром, конечно, было ещё много чего прочего.
А ещё я понял, что "хуки" всё-таки норм, и новые проекты можно писать на них.
Пока ещё устоятся немного, народ потестирует.
Плюсы: минификация кода, т.к. методы и переменные классов не минифицируются.
Сроки релиза пока можно сдвинуть на "ближе к осени", судя по всему.