Skip to content

Commit 127d672

Browse files
authored
Addons: improve performance of translations (#12353)
~10ms off I also found an optimization for the projects API, but will do that in a separate PR.
1 parent e8ce592 commit 127d672

File tree

3 files changed

+18
-10
lines changed

3 files changed

+18
-10
lines changed

readthedocs/api/v3/serializers.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -860,10 +860,15 @@ def get_translation_of(self, obj):
860860
return None
861861

862862
def get_subproject_of(self, obj):
863-
parent_relationship = obj.superprojects.first()
864-
if parent_relationship:
863+
if obj.main_language_project:
864+
# If the project is a translation, it can't be a subproject,
865+
# so it doesn't have a superproject.
866+
return None
867+
868+
superproject = obj.superproject
869+
if superproject:
865870
# Since the related project can be private, we use a restricted serializer.
866-
return self.related_project_serializer(parent_relationship.parent).data
871+
return self.related_project_serializer(superproject).data
867872
return None
868873

869874

readthedocs/proxito/tests/test_hosting.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -785,7 +785,7 @@ def test_number_of_queries_project_version_slug(self):
785785
active=True,
786786
)
787787

788-
with self.assertNumQueries(17):
788+
with self.assertNumQueries(16):
789789
r = self.client.get(
790790
reverse("proxito_readthedocs_docs_addons"),
791791
{
@@ -814,7 +814,7 @@ def test_number_of_queries_url(self):
814814
active=True,
815815
)
816816

817-
with self.assertNumQueries(18):
817+
with self.assertNumQueries(17):
818818
r = self.client.get(
819819
reverse("proxito_readthedocs_docs_addons"),
820820
{
@@ -850,7 +850,7 @@ def test_number_of_queries_url_subproject(self):
850850
active=True,
851851
)
852852

853-
with self.assertNumQueries(22):
853+
with self.assertNumQueries(20):
854854
r = self.client.get(
855855
reverse("proxito_readthedocs_docs_addons"),
856856
{
@@ -866,7 +866,7 @@ def test_number_of_queries_url_subproject(self):
866866
assert r.status_code == 200
867867

868868
# Test parent project has fewer queries
869-
with self.assertNumQueries(17):
869+
with self.assertNumQueries(16):
870870
r = self.client.get(
871871
reverse("proxito_readthedocs_docs_addons"),
872872
{
@@ -892,7 +892,7 @@ def test_number_of_queries_url_translations(self):
892892
language=language,
893893
)
894894

895-
with self.assertNumQueries(35):
895+
with self.assertNumQueries(29):
896896
r = self.client.get(
897897
reverse("proxito_readthedocs_docs_addons"),
898898
{
@@ -1042,7 +1042,7 @@ def test_file_tree_diff(self, get_manifest):
10421042
],
10431043
),
10441044
]
1045-
with self.assertNumQueries(25):
1045+
with self.assertNumQueries(24):
10461046
r = self.client.get(
10471047
reverse("proxito_readthedocs_docs_addons"),
10481048
{

readthedocs/proxito/views/hosting.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,10 @@ def _get_projects_response(self, *, request, project, version, resolver):
591591
.exclude(pk=project.pk)
592592
.order_by("language")
593593
.select_related("main_language_project")
594-
.prefetch_related("tags", "domains", "related_projects", "users")
594+
# NOTE: there is no need to prefetch superprojects,
595+
# as translations are not expected to have superprojects,
596+
# and the serializer already checks for that.
597+
.prefetch_related("tags", "domains", "users")
595598
)
596599
# NOTE: we check if there are translations first,
597600
# otherwise evaluating the queryset will be more expensive

0 commit comments

Comments
 (0)