受信任的缓存会缓存哪些文件扩展名? CFM和CFC很明显,但是CFR呢?受信任的缓存还会捕获其他文件扩展名吗?
我知道/怀疑文件进入模板缓存的一些位置是:
直接在网址中指定的
cfm
,cfml
,cfc
以及更多?)<cfinclude template="./some.css">
)cfm
,更多?)cfm
,还有jar
和tld
吗?)cfc
以及.net,com,java和Web服务吗?)cfr
吗?)还有其他标签具有与将内容添加到模板缓存中相同的效果吗?
最佳答案
Adobe ColdFusion(和Railo)将CFML模板编译为JVM字节码,如果进行了配置,则会将编译后的类作为.class文件写入磁盘。模板缓存是一种机制,可以说:如果目标类已经加载,则不必费心查看磁盘上的(源)文件以查看其是否需要重新编译-信任内存中的内容。
ACF和Railo的最新增强功能使您可以指定可以始终(不信任)检查(源)文件,每个请求一次,永不(始终受信任)。
对任何人来说,这都不应该是新闻。
显然,ACF和Railo会编译要求它们处理的任何.cfm或.cfc文件,因此如果启用它们,它们将“终止”在受信任的缓存中。
如果cfinclude一个文件-任何文件-ACF和Railo也会将该文件编译为JVM字节码(如果配置为在磁盘上创建.class文件)。由于包含的文件已编译,因此它也将“结束”在受信任的缓存中。如果包含CSS文件,那会怎样?它被编译为字节码,该字节码将CSS文件的全部内容作为字符串输出到响应流。由于它是一个已编译的类,因此现在会输出一个硬编码的字符串,如果您更改CSS源文件并启用了受信任的缓存,则ACF和Railo将信任类加载器中的内容,而不重新编译它(假定“从不”检查源是admin环境)。
您可以通过清除cfclasses文件夹,重新启动CFML引擎并运行代码来验证这一点。您会看到一个.class文件出现在CSS文件中(假设您已启用将类文件保存到磁盘的功能)。
因此,cfinclude强制编译“any”文件,并且受信任的高速缓存的常规规则适用于加载到内存中的类。
我不再使用ACF,因此无法详细介绍.cfr文件(Railo不支持报告文件),但这很可能取决于ACF是否编译.cfr文件。它应该很容易验证(通过在cfclasses文件夹中查看)。
关于coldfusion - 哪些文件扩展名受ColdFusion的Trusted Cache影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8269531/