小心在 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 将会影响性能


Practice makes perfect.

本帖由系统于 1周前 自动加精
Summer
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 12

:open_mouth:

1周前 评论
qingyan233

:kissing_heart:

1周前 评论

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

1周前 评论
pigzzz

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

1周前 评论
Summer: 一直把模板引擎想理所当然了,性能消耗很大,你自己本地试试 1周前
Nick

:+1:

1周前 评论
hainuo

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

1周前 评论

才知道,感谢分享、

1周前 评论

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

1周前 评论

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

1周前 评论
hainuo: 前后端真正分离的项目对seo都不太友好 ssr 在目前的方式上还是有些问题的 大厂可能已经普及。但是周边小才刚开始用的6⃣️ 1周前

include_once 呢,影响不影响性能。

1周前 评论
hainuo: 感觉不会影响太大。。 1周前

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

6天前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!