小心在 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 协议》,转载必须注明作者和本文链接
摈弃世俗浮躁,追求技术精湛
本帖由系统于 6年前 自动加精
Summer
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 16

:kissing_heart:

6年前 评论

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

6年前 评论

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

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

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

6年前 评论

才知道,感谢分享、

6年前 评论

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

6年前 评论

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

6年前 评论
hainuo 6年前

include_once 呢,影响不影响性能。

6年前 评论
hainuo 6年前

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

6年前 评论
cnguu

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

6年前 评论

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

6年前 评论

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

file

6年前 评论

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

5年前 评论

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