小心在 Blade 模板里的大量 include 将会影响性能

为了方便代码的管理,有时候我们会使用:

@foreach ($topics as $topic)
    @include('topics._topic_simple', ['topic' => $topic])
@endforeach

在上面的例子中,每一个 topics._topic_simple 对应下图的每一个文章元素:

Blade 模板里的大量 include 将会影响性能

今天在本地做了一个测试,在所有逻辑都相同的情况下,修改了加载模板的逻辑把:

@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,测试结果:

Blade 模板里的大量 include 将会影响性能

Blade 模板里的大量 include 将会影响性能

本作品采用《CC 协议》,转载必须注明作者和本文链接
摈弃世俗浮躁,追求技术精湛
本帖由系统于 4年前 自动加精
Summer
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 16

:kissing_heart:

4年前 评论

也就是说模板缓存并不作用于 @include 命令咯?

4年前 评论

那站内信,动态之类的模板是不是也要用在一个带 @if 的模板替代 @include 不同的模板

4年前 评论
Summer (楼主) 4年前
hainuo

这个 应该就是指的多次打开文件和只打开一次文件的区别吧
上面有朋友说模版缓存,我感觉这个东西与模版缓存还真的有点沾不上边,模版缓存后仍然要引入的 除非是编译缓存 将文件编译成一个文件

4年前 评论

才知道,感谢分享、

4年前 评论

应该是在变量中引入 @include ,致使 view cache 无法生效

4年前 评论

现在还有混编模板模式么? 几乎都前后端分离了,,/doge

4年前 评论
hainuo 4年前

include_once 呢,影响不影响性能。

4年前 评论
hainuo 4年前

:joy: 本来还想着用include 来简化代码

4年前 评论
cnguu

使用绝对路径可能会好一点

4年前 评论

有需要foreach include 時用 @each 的效果會好一點

4年前 评论

@mokeyjay
include('xxxx'),最后生成的缓存文件是这样的:

file

4年前 评论

inject 注入查询,非常影响性能,条件判断也没用,感觉是直接执行了一遍,在渲染视图的。所以如果有用到数据查询,千万不要用这种方式,不如用赋值

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!