At my previous job, we were told not to use partials to clean up our view code, because each rendering of a partial would add around 10ms to the overall response time. After I was told this I did a quick test in my dev environment, but I’d never actually tested the claim on production … until today!
I created a new rails project and generated a scaffold I called
things. On the index page, underneath the auto-generated table, I put the following:
<% if params[:manypartials].present? %> <p>Many partials:</p> <% 1000.times do %> <%= render "simplepartial", iterations: 1 %> <% end %> <% else %> <p>One big partial:</p> <%= render "simplepartial", iterations: 1000 %> <% end %>
I then created the partial
simplepartial and added this code:
<% iterations.times do %> <p>This is a simple partial. Hello from the partial!</p> <% end %>
I launched the dev server with
rails s and the production server with
rails s -e production. I ran
time curl "http://0.0.0.0:3000/things?manypartials=true" > /dev/null
time curl "http://0.0.0.0:3000/things" > /dev/null
to make the requests. (The pipe to
/dev/null is to reduce the time spent printing stuff to the terminal.)
|Many partials||One big partial|
So it seems that rendering 1000 partials will cause around 100–200ms of extra rendering time. That’s certainly not great, but it may not be too high a price to pay for HTML templates not growing to thousands of lines.