Improving the matplotlib approach
Consider what happens now when the page for a completed survey is requested by a browser. For each question in the survey, the returned completed survey page has an embedded image that, when fetched, will trigger a call to the answer_piechart
view. That view dynamically generates an image and is computationally expensive. In fact, depending on your hardware, if you try stepping through that view you may be able to observe appreciable pauses when stepping over some of the matplotlib
calls.
Now consider what happens when many different users request the same completed survey page. That will trigger many calls into the computationally expensive answer_piechart
view. Ultimately, all of the users will be served the exact same data, since results are not displayed until the survey is closed, so the underlying vote counts used to create the pie chart will not be changing. Yet answer_piechart
will be called over and over to re-do the same considerable amount of work...