Edit.json: preload annotation users

The expensive part of fetching an edit is JSONifying the clips'
annotations. Profiling showed that the main cost was Annotation.json(),
and within that:

File: /srv/pandora/pandora/annotation/models.py
Function: json at line 216

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
216                                               def json(self, layer=False, keys=None, user=None):
217       632          827      1.3      0.1          j = {
218       632      1048170   1658.5     89.6              'user': self.user.username,
219                                                   }

Obviously this join just moves some of the cost further out, but it
brings my micro-benchmark down from 1.3s to 0.3s.
This commit is contained in:
Will Thompson 2015-08-02 16:02:47 +02:00 committed by j
parent ab5a20d3a2
commit f3fdded07d

View file

@ -522,7 +522,7 @@ class Clip(models.Model):
if user and user.is_anonymous(): if user and user.is_anonymous():
user = None user = None
qs = qs.filter(user=user) qs = qs.filter(user=user)
for a in qs.order_by('start'): for a in qs.order_by('start').select_related('user'):
ll.append(a.json(user=user)) ll.append(a.json(user=user))
return layers return layers