Overcoming long Views rendering time on Drupal sites
A client contacted us to assist them in finding a solution for slow page times for their site.
All the pages of the site were slow, and taking 2.9 to 3.3 seconds.
Upon investigation, we found that one view was responsible for most of that time.
However, the query execution itself was fast, around 11 ms.
But, the views rendering time was obscenely high: 2,603.48 ms!
So, when editing the view, you would see this at the bottom:
Query build time 2.07 ms Query execute time 11.32 ms View render time 2,603.48 ms
Since this view was on each page, in a block on the side bar, it was causing all the pages of the site to be slow.
The underlying reason was really bad coding in the views-view--viewname.tpl.php, which is too long to explain. But the gist of it is that the view returned several thousands rows of taxonomy terms, and was was supposed to render them in a tree. However, the actual view template just looped through the dataset and did not do much and displayed static HTML in the end!
The solution for this was quite simple: enable Views caching.
If most of your visitors to the site are anonymous (i.e. not logged in to Drupal), then it is simpler and better to use global caching.
To do this, go to the view's Defaults, then Basic settings, then Caching. Change to Time Based, then select at least 1 hour for each of Query results and Rendered output.
If your site has a significant portion of its visitors logged in, then you can be more granular in caching, per role, per user, ...etc.
To do this, go to the view's Block menu on the left, then Block settings, then Caching.
You can select various options, such as per role, or per user, depending on the specific block.
Remember that you have to do this for each block display, if you have multiple blocks for the same view.
Now, save the view, and you will see a positive impact on performance of your pages.
Is your Drupal site slow?