Thymeleaf 教程

模板缓存

Thymeleaf 的工作得益于一组解析器 —— 针对标记和文本 —— 将模板解析为事件序列(打开标签、文本、关闭标签、注释等),以及一系列处理器 —— 针对需要应用的每一种行为类型,修改模板解析的事件序列,以便通过将原始模板与我们的数据相结合来输出我们期望的结果。

默认情况下,Thymeleaf 还包括一个存储解析模板的缓存;在处理模板文件之前读取和解析模板文件所产生的事件序列。这在 web 应用程序中特别有用,并基于以下概念:

(1)输入/输出几乎总是任何应用程序中最慢的部分。相比之下,内存中的处理是非常快的。

(2)克隆一个现有的内存中的事件序列总是比读取一个模板文件,解析它并为它创建一个新的事件序列要快得多。

(3)Web 应用程序通常只有几十个模板。

(4)模板文件一般是不会太大的,而且在应用程序运行时不会被修改。

上面的这一切导致了这样一个想法:在一个 Web 应用中对最常用的模板进行缓存是可行的,而不会浪费大量的内存,同时也会节省大量的时间,而这些时间会花在对一小部分文件的输入/输出操作上,事实上,这些文件永远不会改变。

那么我们怎样才能控制这个缓冲区呢?首先,我们之前已经知道,我们可以在模板解析器处启用或禁用它,甚至只作用于特定的模板:

// Default is true
templateResolver.setCacheable(false);
templateResolver.getCacheablePatternSpec().addPattern("/users/*");

另外,我们可以通过建立自己的缓存管理器对象来修改其配置,这个对象可以是默认的 StandardCacheManager 实现的实例。

// Default is 200
StandardCacheManager cacheManager = new StandardCacheManager();
cacheManager.setTemplateCacheMaxSize(100);
...
templateEngine.setCacheManager(cacheManager);

请参考 org.thymeleaf.cache.StandardCacheManager 的 javadoc API,了解更多关于配置缓存的信息。

注意,我们可以手动从模板缓存中删除条目,例如:

// 彻底清除缓存
templateEngine.clearTemplateCache();

// 从缓存中清除一个特定的模板
templateEngine.clearTemplateCacheFor("/users/userList");
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号