Оптимизация производительности DRF

Я пытаюсь оптимизировать представление DRF, которое имеет очень низкую производительность, есть ли способ сделать его быстрее? Вот где я сейчас нахожусь

Модели:

class CategoryVideos(models.Model):
    class Meta:
        verbose_name = 'Category'
        verbose_name_plural = 'Categories'
    name = models.CharField(max_length=100, null=False, blank=False)

    def __str__(self):
        return f"{self.name} and {self.id}"

class Videos(models.Model):
    category = models.ManyToManyField(CategoryVideos, null=True, blank=True)
    illustration = models.FileField(null=True, blank=True) 
    video = models.FileField(null=True, blank=True)
    title = models.CharField(max_length=255, null=True, blank=True)
    description = models.CharField(max_length=255, null=True, blank=True)
    url_video = models.CharField(max_length=255, null=True, blank=True)
    url_image = models.CharField(max_length=255, null=True, blank=True)

Сериализаторы:

class CategorySerializer2(serializers.ModelSerializer):
    class Meta:
        model = CategoryVideos
        fields = ["name"] 

class VideoSerializer(serializers.ModelSerializer):

    category = CategorySerializer2(many=True, read_only=True) 

    class Meta:
        model = Videos
        fields = ["id", "description", "title", "url_video", "url_image", "category"]
        read_only=True

Вид:


class OfferListAPIView(generics.ListAPIView):
    queryset  = Videos.objects.prefetch_related('category').all()
    serializer_class=VideoSerializer

На данный момент, при 400 видео и всего 6 категориях, для получения ответа требуется около 2,8 секунд, что слишком много. Большое спасибо

Поскольку вы используете только для перечисления вы можете добавить db_index=True атрибут для любого поля, вы также можете использовать db_index=True для создания индекса на ForeignKey и ManyToManyFields для повышения производительности.
обратите внимание, что создание индексов может замедлить производительность некоторых операций с базой данных, таких как вставка или обновление больших объемов данных.

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