Почему мои сериализаторы django core.так медленны

#python #django #django-views #django-serializer

Вопрос:

У меня есть сериализатор a от core.сериализаторы в моем представлении django. Это действительно работает, но иногда для отображения моей таблицы результатов требуется более 1 минуты. Есть идеи, как сделать это быстрее?

 # views.py 
from django.core import serializers

def search_institution(request):
    form = SearchInstitutionsForm()
    qs = Institution.objects.all()
    if request.method == "POST":
        form = SearchInstitutionsForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            if cd['name']:
                qs = Institution.objects.filter(name__contains=cd['name'])
            print(f"Before requesting from db: {datetime.now()}")
            print(f"After requesting from db, before serializing: {datetime.now()}")
        context = {
            "result_data": SafeString(serializers.serialize("json", qs)),
            'form': form
        }
        print(f"After serializing, before rendering: {datetime.now()}")
        return render(request, "landing/result_table.html", context)
    else:

        context = {
            "form": SearchInstitutionsForm
        }
        return render(request, "stakeholders/institution_form.html", context)

 

Ответ №1:

Ваши операторы печати мало помогают, потому что наборы запросов ленивы. Это означает, что они оцениваются не во время фильтрации qs = Institution.objects.filter(name__contains=cd['name']) , а, скорее, когда используется фактическое значение.

Так что я не особо вдаюсь в сериализацию, для этого есть действительно хорошие способы, и Django сам по себе уже предоставляет хорошие инструменты. Посмотрите на набор запросов и производительность базы данных, это самая важная тема, откуда, как я подозреваю, у вас проблемы с производительностью. Также проведите больше исследований по select_related и prefetch_related, это поможет вам сократить более 200 запросов до 2

Вы можете использовать панель инструментов отладки django в своей локальной среде, чтобы легко отслеживать свое приложение. Но есть и другие инструменты профилирования и советы.