Встречается на собеседованиях • сегодня

Как передать большую таблицу с Backend на Frontend

Для передачи больших таблиц с Backend на Frontend оптимально использовать пагинацию, потоковую передачу или сжатие данных.

1. Пагинация (разбивка на страницы):

python
# Django example
from django.core.paginator import Paginator

def get_data(request):
    queryset = MyModel.objects.all()
    paginator = Paginator(queryset, 100)  # 100 записей на страницу
    page = request.GET.get('page', 1)
    data = paginator.page(page)
    return JsonResponse({'data': list(data.object_list.values())})

2. Потоковая передача (Streaming):

python
# FastAPI example
from fastapi import Response
import csv
from io import StringIO

@app.get("/stream-csv")
async def stream_csv():
    data = MyModel.objects.all().iterator()
    buffer = StringIO()
    writer = csv.writer(buffer)
    for row in data:
        writer.writerow([row.field1, row.field2])
    return Response(content=buffer.getvalue(), media_type="text/csv")

3. Сжатие (Gzip/JSON):

python
# Flask example
from flask import jsonify, make_response
import gzip

@app.route('/compressed-data')
def compressed_data():
    data = get_large_data()
    compressed = gzip.compress(jsonify(data).data)
    response = make_response(compressed)
    response.headers['Content-Encoding'] = 'gzip'
    return response

Дополнительно:

  • Используйте chunked transfer encoding для HTTP.
  • Для очень больших данных рассмотрите WebSockets или Server-Sent Events (SSE).
  • Оптимизируйте запросы (.only(), .defer() в ORM).
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы