Я профилировал свое приложение Django, используя silk , и оказалось, что для 200000 записей в db вызов списка GET занимает 701 мс, из которых только 36 мс тратится на запросы (я использую prefetch_related
и select_related
и нумерация страниц)
Поскольку я предполагал, что db-запросы будут занимать больше всего времени, мне интересно, делаю ли я что-то не так, поскольку 95% времени не тратится на запросы.
Моя основная модель измерения очень вложенная и выглядит следующим образом
class Measurement(models.Model):
filetype = models.ForeignKey(Filetype)
sensor = models.ForeignKey(Sensor)
sensorpositions = models.ManyToManyField('Sensorposition')
experiment = models.ForeignKey(Experiment, related_name = "measurementexperiment")
data = models.FileField(null=True)
и интерфейс ожидает подробный вывод nested-json для каждого поля, поэтому Serializer возвращает не только pk, но и все подполя Foreign-моделей:
class MeasurementSerializer(MeasurementSerializer):
sensor = SensorDetailSerializer(many=False, read_only=True)
sensorpositions = SensorpositionSerializer(many=True, read_only=True)
experiment = ExperimentDetailForMeasurementSerializer(many=False, read_only=True)
filetype = FiletypeSerializer(many=False, read_only=True)
class ExperimentDetailForMeasurementSerializer(ExperimentSerializer):
persons = PersonSerializer(many=True, read_only=True)
conditions = ConditionSerializer(many=True, read_only=True)
location = LocationSerializer(many=False, read_only=True)
layout = LayoutSerializer(many=False, read_only=True)
Так я просто теряю много времени из-за вложенной сериализации или время ответа, как 701 мс, нормальное?