From: Stewart Smith Date: Fri, 10 Aug 2018 08:00:57 +0000 (+1000) Subject: 4x performance improvement for viewing patch with many comments X-Git-Tag: v2.2.0-rc1~300 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cf0826376911b22c846881e3f455b9592d7bda48;p=thirdparty%2Fpatchwork.git 4x performance improvement for viewing patch with many comments Using the example of id:20180720035941.6844-1-khandual@linux.vnet.ibm.com with my test dataset of a chunk of a variety of mailing lists, has this cover letter have 67 comments from a variety of people. Thus, it's on the larger side of things. Originally, displaying the /patch/550/ for this (redirected to /cover) would take 81 SQL queries in ~60ms on my laptop. After this optimisation, it's down to 14 queries in 14ms. When the cache is cold, it's down to 32ms from 83ms. The effect of this patch is to execute a join in the database to get the submitter information for each comment at the same time as getting all the comments rather than doing a one-by-one lookup after the fact. Signed-off-by: Stewart Smith Reviewed-by: Stephen Finucane --- diff --git a/patchwork/templates/patchwork/submission.html b/patchwork/templates/patchwork/submission.html index e817713f..2f69735d 100644 --- a/patchwork/templates/patchwork/submission.html +++ b/patchwork/templates/patchwork/submission.html @@ -262,7 +262,7 @@ function toggle_div(link_id, headers_id) -{% for item in submission.comments.all %} +{% for item in comments %} {% if forloop.first %}

Comments

{% endif %} diff --git a/patchwork/views/cover.py b/patchwork/views/cover.py index aada6834..be5db2c2 100644 --- a/patchwork/views/cover.py +++ b/patchwork/views/cover.py @@ -45,6 +45,12 @@ def cover_detail(request, cover_id): 'project': cover.project, } + comments = cover.comments.all() + comments = comments.select_related('submitter') + comments = comments.only('submitter', 'date', 'id', 'content', + 'submission') + context['comments'] = comments + return render(request, 'patchwork/submission.html', context) diff --git a/patchwork/views/patch.py b/patchwork/views/patch.py index 6921882e..e000d0c6 100644 --- a/patchwork/views/patch.py +++ b/patchwork/views/patch.py @@ -113,6 +113,12 @@ def patch_detail(request, patch_id): if request.user.is_authenticated: context['bundles'] = request.user.bundles.all() + comments = patch.comments.all() + comments = comments.select_related('submitter') + comments = comments.only('submitter', 'date', 'id', 'content', + 'submission') + + context['comments'] = comments context['submission'] = patch context['patchform'] = form context['createbundleform'] = createbundleform