diff mbox series

[v2] 4x performance improvement for viewing patch with many comments

Message ID 20180809043455.25232-1-stewart@linux.ibm.com
State Superseded
Headers show
Series [v2] 4x performance improvement for viewing patch with many comments | expand

Commit Message

Stewart Smith Aug. 9, 2018, 4:34 a.m. UTC
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 <stewart@linux.ibm.com>
---
 patchwork/templates/patchwork/submission.html | 2 +-
 patchwork/views/cover.py                      | 5 +++++
 patchwork/views/patch.py                      | 5 +++++
 3 files changed, 11 insertions(+), 1 deletion(-)

---
Changes since v1: don't fat finger patch viewing (s/cover/patch/)
diff mbox series

Patch

diff --git a/patchwork/templates/patchwork/submission.html b/patchwork/templates/patchwork/submission.html
index e817713f7079..2f69735d6925 100644
--- a/patchwork/templates/patchwork/submission.html
+++ b/patchwork/templates/patchwork/submission.html
@@ -262,7 +262,7 @@  function toggle_div(link_id, headers_id)
 </pre>
 </div>
 
-{% for item in submission.comments.all %}
+{% for item in comments %}
 {% if forloop.first %}
 <h2>Comments</h2>
 {% endif %}
diff --git a/patchwork/views/cover.py b/patchwork/views/cover.py
index 73f83cb99b99..edad90bc694d 100644
--- a/patchwork/views/cover.py
+++ b/patchwork/views/cover.py
@@ -45,6 +45,11 @@  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_to_response('patchwork/submission.html', context)
 
 
diff --git a/patchwork/views/patch.py b/patchwork/views/patch.py
index cbd4ec395d99..f43fbecd9a4d 100644
--- a/patchwork/views/patch.py
+++ b/patchwork/views/patch.py
@@ -114,6 +114,11 @@  def patch_detail(request, patch_id):
     if is_authenticated(request.user):
         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