开发学院

您的位置:首页>教程>正文

教程正文

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");