【问题标题】:Why is my django core.serializers so slow为什么我的 django core.serializers 这么慢
【发布时间】:2021-10-20 21:17:31
【问题描述】:

我的 django 视图中有一个来自 core.serializers 的序列化程序。它确实有效,但有时需要超过 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)

【问题讨论】:

    标签: python django django-views django-serializer


    【解决方案1】:

    您的打印语句没有多大帮助,因为Querysets are lazy。这意味着它们不会在过滤 qs = Institution.objects.filter(name__contains=cd['name']) 时进行评估,而是在使用实际值时进行评估。

    所以我不会过多地讨论序列化,有很多很好的方法可以做到这一点,而 Django 本身已经提供了很好的工具。 查看 Queryset 和 database performance,这是最重要的主题,我怀疑您的性能问题来自哪里。还要对 select_related 和 prefetch_related 做更多的研究,它将帮助您将 200 多个查询减少到 2 个

    您可以在本地环境中使用django Debug toolbar 来轻松监控您的应用程序。但也有其他分析工具和技巧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 2011-03-07
      相关资源
      最近更新 更多