深色模式
17.4 解耦式模板对性能的影响
解耦式模板对性能的影响极小。当一个被解析的模板标记为使用解耦逻辑且未被缓存时,模板引擎会先解析解耦逻辑资源,将其处理为内存中的指令序列——本质上就是“要为每个标记选择器注入的属性列表”。
但这是唯一需要额外执行的步骤:完成这一步后,引擎才会解析真正的模板文件;而得益于 AttoParser 强大的节点选择能力,解析器在解析模板的过程中会实时注入这些属性。因此,解析后的节点最终呈现的效果,就如同这些属性原本就直接写在原始模板文件中一样。
这种机制最大的优势是什么?如果模板配置为启用缓存,那么被缓存的模板会已包含注入后的属性。也就是说,对于启用缓存的模板,一旦完成首次缓存,使用解耦式逻辑带来的性能开销就完全为零。
补充说明
- 核心性能逻辑:mermaid
graph LR A[请求模板] --> B{模板是否缓存?}; B -->|是| C[直接返回缓存的、已注入属性的模板]; B -->|否| D[解析.th.xml生成属性注入指令]; D --> E[解析原始模板,实时注入属性]; E --> F[缓存最终模板(含注入属性)]; F --> G[返回模板]; - AttoParser:Thymeleaf 底层使用的标记解析器,提供高效的节点选择和属性操作能力,是“实时注入属性”能低开销完成的核心基础;
- 性能对比:首次加载未缓存的解耦模板,仅比传统耦合模板多一步“解析.th.xml生成指令”的操作(耗时可忽略);缓存生效后,两者性能完全一致。
总结
- 解耦式模板仅在“未缓存且首次加载”时产生极微小的性能开销(解析解耦逻辑文件);
- 解析原始模板时,属性会被实时注入,最终效果与耦合式模板一致;
- 启用缓存后,解耦式模板的性能开销降为零,与传统写法无差异。
