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");
说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号