Библиотека 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, мы получаем "скелет" ответа, где отсутствующие данные заменены на "плейсхолдеры", которые по мере поступления новых чанков данных будут обрабатываться и заменять собой плейсхолдеры.
Потоковая обработка JSON: инкрементальная обработка чанков по мере поступления данных
Плейсхолдеры: используйте $1, $2 в качестве "заглушек" или собственные RegExp-паттеры
Type safety: Строго типизированный доступ к вашим данным с автоматической десериализацией
Встроенная поддержка работы с потоковыми источниками данных (SSE, WebSockets и т. д.)
Менеджмент состояний: отслеживание
Читать на habr.com