Оптимизация производительности 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 для повышения производительности.
обратите внимание, что создание индексов может замедлить производительность некоторых операций с базой данных, таких как вставка или обновление больших объемов данных.