Библиотека chunk_norris — реализация progressive JSON в Dart

chunk_norris — мощная библиотека Dart для прогрессивной гидратации JSON. Она позволяет работать с JSON-данными, поступающими фрагментами, используя плейсхолдеры, которые обрабатываются по мере поступления данных. Идеально подходит для потоковых API, событий, отправляемых сервером, и любых сценариев, где требуется обработка частичной загрузки данных.

Вдохновением для создания и экспериментов послужила статья Дена Абрамова о Progressive JSON. Кратко о концепции:

Now imagine you want to transfer it over the wire. Because the format is JSON, you’re not going to have a valid object tree until the last byte loads. You have to wait for the entire thing to load, then call JSON.parse, and then process it.

The client can’t do anything with JSON until the server sends the last byte. If a part of the JSON was slow to generate on the server (e.g. loading comments took a slow database trip), the client can’t start any work until the server finishes all the work.

Would you call that good engineering? And yet it’s the status quo—that’s how 99.9999%* of apps send and process JSON. Do we dare to improve on that?

Суть подхода в том, чтобы вместо ожидания загрузки и обработки большого JSON, мы получаем «скелет» ответа, где отсутствующие данные заменены на «плейсхолдеры», которые по мере поступления новых чанков данных будут обрабатываться и заменять собой плейсхолдеры.

Фичи chunk_norris

Потоковая обработка JSON: инкрементальная обработка чанков по мере поступления данных

Плейсхолдеры: используйте $1, $2 в качестве «заглушек» или собственные RegExp-паттеры

Type safety: Строго типизированный доступ к вашим данным с автоматической десериализацией

Встроенная поддержка работы с потоковыми источниками данных (SSE, WebSockets и т. д.)

Менеджмент состояний: отслеживание состояний загрузки (pending, loaded, error) для каждого чанка

Гибкий API: работа с необработанным JSON или строго типизированными объектами

Обработка ошибок: Комплексная обработка ошибок с fallback-механизмами

Области применение chunk_norrisServer-Sent Events, WebSockets (SSE, WS) 

Идеально подходит для потоковой передачи данных в режиме реального времени, когда первоначальный ответ содержит скелет, а последующие события дополняют детали.

Progressive Web Apps 

Сначала загрузите критически важные данные, а затем расширьте их дополнительной информацией по мере ее появления.

Оптимизация API

Сократите время начальной отрисовки UI, отправляя часть данных немедленно и передавая оставшуюся часть в потоковом режиме.

Агрегация данных из нескольких источников

Объедините данные из разных источников (баз данных, API, файлов) в единую унифицированную модель. Мгновенно загружайте доступные данные и заполняйте недостающие фрагменты по мере их появления из более медленных источников.

Ссылки и ресурсы

Репозиторий проекта

Библиотека на pub.dev

Подписаться на telegram-канал автора библиотеки

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии