Почему мой django core.serializers такой медленный

У меня есть мой сериализатор из core.serializers в моем представлении 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)

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

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

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

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