Thymeleaf 3.0教程:16 模板缓存
Thymeleaf的工作得益于一组解析器:用于标记和文本,将模板解析成事件序列(打开标签、文本、关闭标签、注释等)和一系列处理器,每种需要应用的行为各一个,它们修改模板解析的事件序列,以便通过将原始模板与我们的数据相结合来创建我们期望的结果。
默认情况下,它还包括存储解析模板的缓存;处理模板文件之前读取和解析模板文件所产生的事件序列。当在网络应用程序中工作时,这尤其有用,它基于以下概念:
输入/输出几乎总是任何应用程序中最慢的部分。相比之下,内存处理速度非常快。
克隆内存中现有的事件序列总是比读取模板文件、解析模板文件并为其创建新的事件序列快得多。
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。
可以从模板缓存中手动删除条目:
// Clear the cache completely templateEngine.clearTemplateCache(); // Clear a specific template from the cache templateEngine.clearTemplateCacheFor("/users/userList");