Improve bookmark query performance (#334)

* Remove tag projection from bookmark queries

* add feeds performance test
This commit is contained in:
Sascha Ißbrücker
2022-09-09 19:46:55 +02:00
committed by GitHub
parent a30571ac99
commit 6420ec173a
9 changed files with 151 additions and 50 deletions

View File

@@ -1,4 +1,6 @@
from django.db.models import prefetch_related_objects
from rest_framework import serializers
from rest_framework.serializers import ListSerializer
from bookmarks.models import Bookmark, Tag, build_tag_string
from bookmarks.services.bookmarks import create_bookmark, update_bookmark
@@ -9,6 +11,14 @@ class TagListField(serializers.ListField):
child = serializers.CharField()
class BookmarkListSerializer(ListSerializer):
def to_representation(self, data):
# Prefetch nested relations to avoid n+1 queries
prefetch_related_objects(data, 'tags')
return super().to_representation(data)
class BookmarkSerializer(serializers.ModelSerializer):
class Meta:
model = Bookmark
@@ -32,6 +42,7 @@ class BookmarkSerializer(serializers.ModelSerializer):
'date_added',
'date_modified'
]
list_serializer_class = BookmarkListSerializer
# Override optional char fields to provide default value
title = serializers.CharField(required=False, allow_blank=True, default='')