Answers:
当您渲染相同的内容时,我知道许多局部视图和一个视图之间没有显着的渲染性能差异。
显然,如果在某些情况下仅渲染某些部分,而在其他情况下仅渲染其他部分,从而有效地减少了特定视图的渲染量,则可能会提高速度。
另一方面,我一直在考虑局部抽象,至少应该在两个不同的地方使用局部抽象来证明它们的存在。使用partials的另一个原因是当您要呈现相同的视图但根据您拥有的某些业务逻辑加载不同的partials时。
更新:
我无法提供有关渲染速度的度量或一些具体数字。如果在视图中使用局部视图,则要渲染它,请调用render方法,因此有第二个方法调用。就像我在回答中说的那样,这几乎没有什么用,但可能会帮助加快速度。
但是,我从未听说过通过除去部分零件来解决其性能问题的项目。分部是为视图提供重用机制的好方法,从程序员的角度来看,应将其用于该范围。它们应该是视图中常见概念的抽象。
我参与了一个过度使用局部函数的项目。不是Rails,而是相同的MVC原理。在您可以想像的所有内容上使用很少的局部,当您开始拥有数十个局部时,很难找到它们。您在哪里寻找要修改的输入?在视图中?在部分?此视图中哪个部分有4个局部?...
经过一番艰苦的重构,对于视图的每次更新,我们都删除了不必要的部分。它们并没有完全消失,但是剩下的是为项目定义的抽象。它们代表了众所周知的元素(例如某种对象的树或特定的列表类型),它们以某种形式或在其他视图上重复出现。我知道如果我看到一棵树,那有一部分。我知道当我看到某种类型的列表时,会发现其中有一部分。我没有追捕他们。
代码可读性是软件代码库可以做的最重要的事情。
Code readability
,这就是全部。
我不同意这两个答案。我已经将代码从局部复制并粘贴到了它在父视图局部中存在的位置,并且经过了500次迭代,渲染视图所需的时间减少了600毫秒。我认为<%= render xyz%>非常坏。
例如,渲染视图的总时间:
Before:
5759.8ms
5804.2ms
5973.6ms
After:
5268.7ms
5201.6ms
5222.4ms
Diff = 5846 - 5231 = 615 ms
已编辑
我最终取消干燥_model部分中的所有_partial,并将其降低到〜2000ms,这时我尝试将_model部分移动到索引中,但是这对渲染时间没有任何影响,所以我猜想它与嵌套渲染的调用有关可以。
现在正在使用Rails 4.2应用程序,其中缓慢的动作平均耗时约745ms。
当我从部分代码中删除代码并将其放入主模板时,现在平均花费的时间少于25ms。
渲染部分的调用次数仅为29。