Coldfusion 获取当前模板';s上次修改日期而不访问HDD

Coldfusion 获取当前模板';s上次修改日期而不访问HDD,coldfusion,coldfusion-2016,Coldfusion,Coldfusion 2016,我知道我可以使用getFileInfo(getCurrentTemplatePath())来获取当前模板的上次修改日期,但是如果我可以从内存中获取它会更好。我有几个可能的用途,但我还没有准备好为它们辩护,所以现在让我们说我是出于好奇而问的 我假设应用服务器必须在某个时刻检查修改的日期,以决定是否需要编译。如果我必须使用底层Java来实现它,那很好(当然,纯CF方法会更好,但我不抱太多希望) 如果修改后的日期不可用,那么我会选择某种标志,指示当前请求是否触发了重新编译(实际上,这可能也能正常工作)

我知道我可以使用
getFileInfo(getCurrentTemplatePath())
来获取当前模板的上次修改日期,但是如果我可以从内存中获取它会更好。我有几个可能的用途,但我还没有准备好为它们辩护,所以现在让我们说我是出于好奇而问的

我假设应用服务器必须在某个时刻检查修改的日期,以决定是否需要编译。如果我必须使用底层Java来实现它,那很好(当然,纯CF方法会更好,但我不抱太多希望)


如果修改后的日期不可用,那么我会选择某种标志,指示当前请求是否触发了重新编译(实际上,这可能也能正常工作)。

您正在寻找
coldfusion.runtime.TemplateClassLoader
。它处理对
TemplateCache
的查找,或者获取已经编译的模板类,或者调用
coldfusion.compiler.neottranslator
将CFML编译到其中

<cfset templateUri  = getCurrentTemplatePath()>
<cfset lastCompiled = createObject("java", "coldfusion.runtime.TemplateClassLoader").getLastCompiledTime(templateUri)>
<!--- lastCompiled = unix timestamp in milliseconds --->


不用说,这是一个实现细节,您不应该依赖它。

我相信,如果您告诉服务器这样做,它只会检查每个请求的日期。否则,它会将模板加载到模板缓存中,并在下次加载时从那里检索模板。因此,如果有可能得到日期,它将只在非生产环境中工作(假设您在生产环境中关闭了该功能)@Redtopia无论好坏,我们都不会预编译任何东西(我甚至不知道这是一个选项,tbh),所以在任何修改后,模板总是在第一次请求时编译。即使没有,如果没有关于模板最后一次修改、编译或缓存的时间的记录,我也会有点惊讶。而且,要明确的是,如果我不能得到最后一次修改的日期,那么我会满足于下一次最接近的事,不管是什么。如果我能确定服务器何时开始使用它当前提供给客户机的模板的任何版本,那就足够了。这似乎正是我想要的!我一直在玩持久作用域和cfcache,以及动态CSS和JavaScript,我突然想到,这些信息可以用来确定是否需要刷新。如果它停止工作,最糟糕的情况是每次都会刷新。谢谢你的帮助!