问题描述
在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
传递给模板执行,因此它甚至不需要注册自定义函数。