小心在 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 协议》,转载必须注明作者和本文链接
摈弃世俗浮躁,追求技术精湛
本帖由系统于 7年前 自动加精
Summer
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 16

:kissing_heart:

7年前 评论

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

7年前 评论

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

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

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

7年前 评论

才知道,感谢分享、

7年前 评论

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

7年前 评论

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

7年前 评论
hainuo 7年前

include_once 呢,影响不影响性能。

7年前 评论
hainuo 7年前

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

7年前 评论
cnguu

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

6年前 评论

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

6年前 评论

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

file

6年前 评论

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

6年前 评论

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