Não conheço nenhuma diferença significativa no desempenho de renderização entre muitas parciais e uma única exibição quando você renderiza o mesmo conteúdo.
Obviamente, se você renderizar apenas algumas parciais em alguns casos e outras em outros casos, reduzindo efetivamente o volume de renderização de uma exibição específica, poderá ganhar velocidade.
Por outro lado, sempre considerei abstrações parciais que deveriam ser usadas pelo menos em dois lugares diferentes para justificar sua existência. O outro motivo para usar parciais é quando você deseja renderizar a mesma visualização, mas carregar diferentes parciais com base em alguma lógica comercial que você possui.
ATUALIZAR:
Não posso oferecer uma medida ou alguns números concretos sobre a velocidade de renderização. Se você usar um parcial em uma exibição, para renderizá-lo, chame o método render, para que haja uma segunda chamada de método. Isso, como disse na minha resposta, é quase nada, mas pode ajudar a acelerar um pouco as coisas.
No entanto, eu nunca ouvi falar de um projeto corrigindo seu problema de desempenho removendo parciais. Os parciais são uma boa maneira de oferecer um mecanismo de reutilização às visualizações e, na visão dos programadores, eles devem ser usados para esse escopo. Eles devem ser abstrações para conceitos comuns em visualizações.
Eu trabalhei em um projeto em que parciais eram excessivamente usadas. Não Rails, mas os mesmos princípios MVC. Usar pequenas parciais para tudo o que você pode imaginar torna difícil encontrá-las quando você começa a ter dezenas delas. Onde você procuraria uma entrada a ser modificada? Na visão? Parcialmente? Em qual parcial, existem 4 parciais para essa visualização? ...
Após algumas refatorações rígidas, a cada atualização de uma exibição, removíamos as parciais desnecessárias. Eles não desapareceram completamente, mas o que resta são abstrações bem definidas para o projeto. Eles representam elementos bem compreendidos (como uma árvore para algum tipo de objeto ou um tipo de lista específico) que se repetem de uma forma ou de outra em várias visualizações. Eu sei se vejo uma árvore que existe uma parcial para isso. Eu sei quando vejo certo tipo de lista que existe uma parcial para isso. Eu não tenho que caçá-los.
A legibilidade do código é a coisa mais importante que se pode fazer para uma base de código de software.
Code readability
, é disso que se trata.Eu discordo de ambas as respostas. Copiei e colei o código de uma parcial para a posição em que está presente na visualização pai parcial e com 500 iterações, isso leva 600ms enormes do tempo necessário para renderizar a visualização. <% = render xyz%> está na minha opinião muito quebrado.
Exemplo, tempo total para renderizar visualização:
Editado
Acabei desidratando todos os _partials dentro do _model parcial e o reduzi para ~ 2000ms; nesse momento, tentei mover o _model parcial para o índice, mas isso NÃO afetou o tempo de renderização, então acho que é com chamadas para renderização aninhada que faz isso.
fonte
Não é um cara de trilhos, mas as visualizações parciais provavelmente não são o problema em si. Em vez disso, parece que você está fazendo um pouco de SELECT N + 1. Observe as coisas da perspectiva do servidor de banco de dados para garantir que você não esteja perdendo nada.
fonte
Trabalhando em um aplicativo Rails 4.2 no momento, uma ação lenta que levava cerca de 745ms em média.
Quando removo o código das parciais e o coloco no modelo principal, o tempo que leva agora é em média inferior a 25ms.
O número de chamadas para renderizar as parciais foi de apenas 29.
fonte
Mesmo se você tiver não nenhum problema n + 1 e todo o banco de dados trabalhar antecipadamente (digamos, com uma CTE recursiva), as partes aninhadas ainda serão muito lentas. Haml e Erb parecem lentos para mim. No Rails 5.1.4, estou vendo alguns milissegundos para cada parcial, além de parciais ocasionais muito piores (provavelmente correspondentes à coleta de lixo).
Percebi que, se renomear a parcial enquanto uma dessas solicitações estiver em execução, recebo imediatamente um erro sobre como o arquivo não foi encontrado. Então, aparentemente, o Rails está lendo o disco parcial, reparando-o e avaliando-o para cada iteração. Não é de admirar que seja lento!
fonte
Muita lentidão observada em parciais aninhadas ocorre apenas durante o desenvolvimento. Mude para a produção para testar.
fonte