snakesNbronies
snakesNbronies

Reputation: 3910

Django REST framework is slow

I'm started using the Django REST framework in preparation for production, but unfortunately, it is performing quite slowly.

I am calling an array of 500 dictionaries, each with 5 key-value pairs each. In the shell, the call-time is not noticeable at all - you press enter, and it's done. Previously, when I was serving the same content directly without the REST framework, there was also no noticeable delay. However, with the REST framework, it takes about 1 - 2 seconds after the page has rendered for the content to display.

I do not think this is due to javascript as hitting the same details through the browseable API results in a similar delay.

Also, I am NOT cacheing at the moment.

Upvotes: 2

Views: 8138

Answers (1)

Tom Christie
Tom Christie

Reputation: 33901

There's no way anyone else is going to be able to debug this for you from the details given in the question.

  • Are you reusing an existing generic view or writing your own view?
  • Are you serializing the data, if so what does your serializer definition look like?
  • Does the issue manifest when rendering to JSON, or just when rendering to the Browsable API?
  • You mention serving the content without REST framework - what did the views looks like before, and what do they look like after?

The REST framework views are trivial, so use a profiling tool, or simply override them and add some timing. Likewise the renderers are trivial - subclass whatever renderer you're using at the moment, override .render() and add a couple of timing calls either side of calling the parent's .render() method.

If you think you've narrowed down a problem to a specific area then throw together a minimal test case and submit it as an issue.

The serialization itself is unlikely to be an issue, I've used the same serialization engine to replicate Django's fixture dumping and there was no significant degradation.

It's feasible that if you're doing lookups across model relationships you might need to add .select_related() or .prefetch_related() calls when constructing the queryset, exactly as you would with any other Django view.


Edit: Note that following on from this post there were significant serializer speed improvements made, as noted in this ticket.

Upvotes: 10

Related Questions