tgoop.com/super_oleg_dev/80
Last Update:
Вот и SvelteKit начали изящно стримить данные с сервера на клиент - https://svelte.dev/blog/streaming-snapshots-sveltekit
Для сериализации всего что только можно используется либа также от Рича Харриса - devalue
Не так давно (не знаю точно откуда сама идея пошла для мета-фреймворков) такой функционал в Remix добавили, Await
+ defer
- https://remix.run/docs/en/v1/guides/streaming
Как работает фича с React и Remix хорошо и наглядно объяснено в этом gist'е.
Почему называю концепцию изящной - это бесшовная передача данных с сервера на клиент, с более быстрым TTFB, и не надо ждать долгой инициализации клиентского кода до отправки запроса, который раньше бы был слишком медленный для сервера.
Во многом это возможно именно из-за поддержи стриминга на уровне фреймворков - это await
в темплейтах Svelte и Suspense
у React - при использовании стриминговых API для рендеринга React имеет возможность для Suspense
с промисами отправить на клиент fallback, а по завершении промиса отправить нужную разметку на клиент для обновления UI
Это не та оптимизация, которая должна быть дефолтом - но может помочь в ряде кейсов, когда основной функционал страницы заблокирован тяжелым запросом (например любая выдача - поисковая, билеты, отели)
Из клиентских фич React самое близкое сравнение это кажется startTransition API, тут также надо самостоятельно решить, когда необходима эта оптимизация, и в нужном месте она может дать очень хорошие результаты.
Очень хочется добавить такую фичу в tramvai
, где уже есть свои особенности, для запросов используются Actions, которые имеют небольшой таймаут на выполнение на сервере, и информация об этом передается на клиент.
Если экшен не был выполнен на сервере - он автоматически будет запущен на клиенте, можно назвать это синхронизацией.
И вот тут основной минус, что надо долго ждать запуска клиентского экшена, загрузку всех ресурсов, самой страницы и ее гидрации.
Хорошее поле для улучшений)
BY SuperOleg dev notes

Share with your friend now:
tgoop.com/super_oleg_dev/80