进入模板生命周期

问题描述

在Go模板中,我有一个名为“资产”的函数:

<html>
  {{ asset "application.css" }}
</html>

此函数打开一个webpack manifest.json并找到相应的哈希文件:

func asset(s string) string {
  data,_ := ioutil.ReadFile("manifest.json")
  // do stuff with data
  return filename
}

我的问题是关于绩效的影响。什么时候调用此函数?每次执行模板时都要打开清单文件;每次用户访问该页面?还是在最初的template.New("").ParseFiles()通话中被调用?

我最好在应用程序启动时打开文件,并将文件名映射存储在全局变量中吗?这对我来说更有意义,但是处理此问题的最佳方法是什么?

解决方法

每次执行模板时都会调用注册的asset()函数,因此每次打开并读取文件"manifest.json"

如果其内容不变,则可以在首次使用时或在应用程序启动时更好地加载一次,这可能是在程序包初始化期间(在程序包init()函数中)。

如果执行此操作,则可以将filename传递给模板执行,因此它甚至不需要注册自定义函数。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...