我有父 main_layout.html.twig,里面是这样的:
{% block javascripts %}
{{ encore_entry_script_tags('main_layout') }}
{% endblock %}
{% block content %}{% endblock %}
我们有子 user_profile_main_page.html.twig,里面是这样的:
{% extends "main_layout.html.twig" %}
{% block javascripts %}
{{ parent() }}
{{ encore_entry_script_tags('user_profile_main_page') }}
{% endblock %}
{% block content %}
{{ render_esi(controller('SiteBundle:User/Profile:activeAds')) }}
{% endblock %}
User/Profile:activeAds 正在呈现 user_profile_active_ads.html.twig 其中包含:
{{ encore_entry_script_tags('user_profile_active_ads') }}
Encore 设置为:
Encore
.setOutputPath('web/build/')
.setPublicPath('/build')
.enableSourceMaps(!Encore.isProduction())
.enableVersioning()
.addEntry('main_layout', './src/SiteBundle/js/MainLayout.js')
.addEntry('user_profile_main_page', './src/SiteBundle/js/UserProfileMainPage.js')
.addEntry('user_profile_active_ads', './src/SiteBundle/js/UserProfileActiveAds.js')
.splitEntryChunks()
.enableSingleRuntimeChunk()
.autoProvidejQuery();
config.yml 包含:
framework:
esi: { enabled: true }
fragments: ~
UserProfileActiveAds.js 包含:
$(function () {
console.log('aaa');
});
当这个页面启动时,'aaa' 被写入控制台两次。
创建的 Html 如下所示:
<script src="/build/runtime.672c0058.js?r12513"></script>
<script src="/build/0.cf60d32b.js?r12513"></script>
<script src="/build/1.a39e4c28.js?r12513"></script>
<script src="/build/main_layout.e553e805.js?r12513"></script>
<script src="/build/5.d1d1404c.js?r12513"></script>
<script src="/build/user_profile_main_page.e7b326a8.js?r12513"></script>
<script src="/build/runtime.672c0058.js?r12513"></script>
<script src="/build/0.cf60d32b.js?r12513"></script>
<script src="/build/1.a39e4c28.js?r12513"></script>
<script src="/build/user_profile_active_ads.71f49a75.js?r12513"></script>
那就是runtime.672c0058.js?r12513在html中包含了两次!我认为这就是为什么将字符串写入 2 次以进行日志记录的原因。console.log('aaa') 只能在 js 文件中找到一次(在 /build/user_profile_active_ads.9b477d8d.js?r12513 中)。
当我不写render_esi时,我只写render:一切都按预期工作 - 字符串曾经记录到输出(并且运行时只包含一次)。但我想使用 render_esi,因为 user_profile_active_ads.html.twig 不应该被缓存,而它的父级被缓存。
如何通过双重初始化解决此问题?