小心在 Blade 模板里的大量 include 将会影响性能
为了方便代码的管理,有时候我们会使用:
@foreach ($topics as $topic)
@include('topics._topic_simple', ['topic' => $topic])
@endforeach
在上面的例子中,每一个 topics._topic_simple 对应下图的每一个文章元素:

今天在本地做了一个测试,在所有逻辑都相同的情况下,修改了加载模板的逻辑把:
@foreach ($topics as $topic)
@include('topics._topic_simple', ['topic' => $topic])
@endforeach
修改为:
@include('topics._topics')
然后在 topics._topics 里:
@foreach ($topics as $topic)
<div class="py-2 simple-topic">
<div class="image-44 user-avatar">
...
</div>
</div>
@endforeach
由无数个 include 变成一个 include,测试结果:


本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
关于 LearnKu
:open_mouth:
:kissing_heart:
也就是说模板缓存并不作用于 @include 命令咯?
那站内信,动态之类的模板是不是也要用在一个带 @if 的模板替代 @include 不同的模板
。。。
:+1:
这个 应该就是指的多次打开文件和只打开一次文件的区别吧
上面有朋友说模版缓存,我感觉这个东西与模版缓存还真的有点沾不上边,模版缓存后仍然要引入的 除非是编译缓存 将文件编译成一个文件
才知道,感谢分享、
应该是在变量中引入 @include ,致使 view cache 无法生效
现在还有混编模板模式么? 几乎都前后端分离了,,/doge
include_once 呢,影响不影响性能。
:joy: 本来还想着用include 来简化代码
使用绝对路径可能会好一点
有需要foreach include 時用 @each 的效果會好一點
@mokeyjay
include('xxxx'),最后生成的缓存文件是这样的:
inject 注入查询,非常影响性能,条件判断也没用,感觉是直接执行了一遍,在渲染视图的。所以如果有用到数据查询,千万不要用这种方式,不如用赋值