Более быстрый API для передней страницы таблицы данных?

Я использую Django для питания фронт-энда веб-страницы, построенной с помощью React.

У меня есть API, который получает необходимые данные с некоторым форматированием, но он довольно медленный. Есть предложения, как создать более быстрый API? В настоящее время он возвращает 8 записей, что занимает >3 секунды.

def deployed_data(request):
    deployments = deployment.objects.filter(LAUNCH_DATE__isnull=False).filter(HISTORICAL=False)

    res = []
    for dep in deployments:
        crt_dep = {
            "FLOAT_SERIAL_NO":dep.FLOAT_SERIAL_NO,
            "PLATFORM_NUMBER":dep.PLATFORM_NUMBER,
            "PLATFORM_TYPE":dep.PLATFORM_TYPE.VALUE,
            "DEPLOYMENT_CRUISE_ID":dep.DEPLOYMENT_CRUISE_ID,
            "DEPLOYMENT_PLATFORM":dep.DEPLOYMENT_PLATFORM.VALUE,
            "LAUNCH_DATE":dep.LAUNCH_DATE.strftime("%Y-%m-%d"),
            "status":dep.status,
            "last_report":dep.last_report.strftime("%Y-%m-%d %H:%M"),
            "next_report":dep.next_report.strftime("%Y-%m-%d %H:%M"),
            "days_since_last":dep.days_since_last,
            "last_cycle":dep.last_cycle,
            "age":dep.age.days
        }
        res.append(crt_dep)

    return JsonResponse(res, status = 200, safe=False)

Конечно, это медленнее, вы выполняете переиализацию в каждом цикле, каждое значение в дикте - это отдельный удар по базе данных! Просто используйте drf serializer или даже django serializer для преобразования этих данных за один раз или используйте значения после фильтра

views.py

class GetDeploymentData(generics.ListAPIView):
    serializer_class = DeployedDataSerializer
    queryset=deployment.objects.filter(LAUNCH_DATE__isnull=False).filter(HISTORICAL=False)

serializers.py

class DeployedDataSerializer(serializers.Serializer):
    FLOAT_SERIAL_NO = serializers.IntegerField()
    PLATFORM_NUMBER = serializers.IntegerField()
    PLATFORM_TYPE = serializers.CharField()
    status = serializers.CharField()
    DEPLOYMENT_CRUISE_ID = serializers.CharField()
    DEPLOYMENT_PLATFORM = serializers.CharField()
    LAUNCH_DATE = serializers.DateTimeField(format="%Y-%m-%d %H:%M")
    last_report = serializers.DateTimeField(format="%Y-%m-%d %H:%M")
    next_report = serializers.DateTimeField(format="%Y-%m-%d %H:%M")
    days_since_last = serializers.IntegerField()
    last_cycle = serializers.IntegerField()
    age = serializers.IntegerField(source="age.days")

Как указал Мохамед, сериализаторы намного быстрее. Но это все равно не так быстро, как та же страница, созданная с помощью шаблонов django.

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