[PATCH 02/11] 4x performance improvement for viewing patch with many comments

Stewart Smith stewart at linux.ibm.com
Tue Aug 14 17:03:16 AEST 2018


Daniel Axtens <dja at axtens.net> writes:
> Stewart Smith <stewart at linux.ibm.com> writes:
>
>> Using the example of id:20180720035941.6844-1-khandual at 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 at 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(-)
>>
>> 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')
> These items should be separated by ", " not just ",". I can fix this up
> when I apply. You also don't need 'id' as it's added automatically.

(thanks for fixup).

Hrm.. I wonder why I had id there then... I wouldn't put it past Django
to do something silly otherwise, but I could well be wrong.

-- 
Stewart Smith
OPAL Architect, IBM.



More information about the Patchwork mailing list