Как загружать сообщения чата партиями в Django с помощью StreamingHttpResponse?

Я работаю над проектом Django, который передает сообщения чата между двумя пользователями с помощью StreamingHttpResponse и async-функций. Я хочу загружать сообщения партиями (например, по 20 за раз), а не загружать все сообщения сразу, чтобы оптимизировать производительность и уменьшить время начальной загрузки.

Вот мой текущий код представления:

Как я могу изменить этот код, чтобы первоначально загружались последние 20 сообщений, а затем загружались другие сообщения (партиями по 20), когда пользователь нажимает кнопку "Загрузить еще"?

Любые советы или примеры того, как эффективно справиться с этим, будут очень признательны.

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

Но обычно идея StreamingHttpResponse заключается в том, что клиент заинтересован во всем содержимом, хотя он может быть не в состоянии хранить все содержимое в памяти или обрабатывать все содержимое сразу.

But your "Load more" button is not per se clicked: one will very likely only load the first 20-60 messages anyway. In that case multiple HTTP requests are made. It is essentially just pagination [Django-doc], except that the user does not really specifies the page, but typically some (small) JavaScript does.

Действительно, библиотека JavaScript таким образом делает HTTP-запрос, например через AJAX, чтобы получить первые ~20 элементов, а когда пользователь нажимает кнопку "Загрузить еще", она делает дополнительный AJAX-запрос, запрашивая следующую "страницу", которую затем отображает в DOM.

Если вы, например, используете Django REST framework, вы можете работать с одним из уже встроенных пагинаторов [drf-doc], где вы можете использовать querystrings, тело запроса или заголовки для указания страницы, или смещения и ограничения.

Вернуться на верх