在不访问硬盘的情况下获取当前模板的最后修改日期
Get current template's last modified date without accessing HDD
我知道我可以使用 getFileInfo(getCurrentTemplatePath())
来获取当前模板的最后修改日期,但如果我能从内存中获取它会更好。我脑子里有几种可能的用途,但我还没有准备好为它们辩护,所以现在我们只是出于好奇而问。
我假设应用程序服务器必须在某个时候检查修改日期以决定是否需要编译。如果我必须使用底层 Java 来实现它,那很好(当然,纯 CF 方法会更好,但我不抱太大希望)。
如果修改日期不可用,那么我会选择某种标志来指示当前请求是否触发了重新编译(实际上,这可能同样有效)。
您正在寻找 coldfusion.runtime.TemplateClassLoader
。它处理针对 TemplateCache
的查找并获取已编译的模板 class 或调用 coldfusion.compiler.NeoTranslator
将 CFML 编译到其中。
<cfset templateUri = getCurrentTemplatePath()>
<cfset lastCompiled = createObject("java", "coldfusion.runtime.TemplateClassLoader").getLastCompiledTime(templateUri)>
<!--- lastCompiled = unix timestamp in milliseconds --->
不用说,这是一个实现细节,你不应该依赖它。
我知道我可以使用 getFileInfo(getCurrentTemplatePath())
来获取当前模板的最后修改日期,但如果我能从内存中获取它会更好。我脑子里有几种可能的用途,但我还没有准备好为它们辩护,所以现在我们只是出于好奇而问。
我假设应用程序服务器必须在某个时候检查修改日期以决定是否需要编译。如果我必须使用底层 Java 来实现它,那很好(当然,纯 CF 方法会更好,但我不抱太大希望)。
如果修改日期不可用,那么我会选择某种标志来指示当前请求是否触发了重新编译(实际上,这可能同样有效)。
您正在寻找 coldfusion.runtime.TemplateClassLoader
。它处理针对 TemplateCache
的查找并获取已编译的模板 class 或调用 coldfusion.compiler.NeoTranslator
将 CFML 编译到其中。
<cfset templateUri = getCurrentTemplatePath()>
<cfset lastCompiled = createObject("java", "coldfusion.runtime.TemplateClassLoader").getLastCompiledTime(templateUri)>
<!--- lastCompiled = unix timestamp in milliseconds --->
不用说,这是一个实现细节,你不应该依赖它。