下面我提供了一个循环显示产品卡的例子。第一个似乎对我来说更方便,但我担心性能因为循环中的@include。由于这项任务很常见,我想选择最好的方法。
search.blade.php
QComboBox
_item.blade.php
<div id='search-results'>
@foreach($items as $item)
@include('items._item')
@endforeach
</div>
search.blade.php
<div>
<div class='item-title'>{{$item->title}}</div>
<div class='item-description'>{{$item->description}}</div>
</div>
_items_list.blade.php
<div id='search-results'>
@include('items._items_list')
</div>
答案 0 :(得分:0)
这可能会产生巨大的性能问题。当您像第一种情况一样循环@include
时,生成的原始php文件确实将包含的视图作为函数调用。这会降低页面渲染速度。
第二种情况更具性能,因为它基本上是1包含(带有包含html片段的循环)。
我现在正遇到这个问题。我有一个数据表循环250条记录,但每条记录包含5个帮助程序。在我的情况下,这些帮助程序非常重要并且包含一些必要的(简单)逻辑,但即使使用简单的逻辑,1250子视图也会导致大量性能下降,将页面的加载时间减少到5-6秒,而复制时为300-400毫秒这个助手代码。
我正在努力编写一个Laravel扩展来解析所有@include
并将其替换为实际代码,但这不是一件容易的事......
这对于生产环境来说是非常值得的优化。我希望Laravel已经为此创建了一个解决方案。
答案 1 :(得分:0)
我通过使用传递给某个刀片的75行然后对该75行进行两次迭代来测试了此行为。 第一个仅在此刀片文件中使用刀片代码,另一个被调用@include另一个具有相同代码的刀片文件,并在每次刺激的开始和结束时使用microtime(true)php函数标记时间 使用@include的情况下,时间增加了3倍。
答案 2 :(得分:-1)
第一种方式似乎是最正确的方法。