6

Trusted Cache 会缓存哪些文件扩展名?CFM 和 CFC 是显而易见的,但 CFR 呢?受信任的缓存是否有其他文件扩展名?

我知道/怀疑文件进入模板缓存的一些地方是:

  • 直接在 url 中指定 ( cfm, cfml, cfc, more?)
  • cfinclude(cfinclude 中使用的任何文件扩展名,例如<cfinclude template="./some.css">
  • cfmodule ( cfm,更多?)
  • cfimport ( cfm, 也jartld?)
  • cfobject、createobject(cfc还有 .net、com、java 和 Web 服务?)
  • cfreport(cfr可以使用 cfcompile 实用程序进行编译?)

是否有其他标签具有将内容添加到模板缓存中的相同效果?

4

3 回答 3

7

Adobe ColdFusion(和 Railo)将 CFML 模板编译为 JVM 字节码,如果配置为这样做,则将编译的类作为 .class 文件写入磁盘。模板缓存是一种机制:如果目标类已经加载,不要费心查看磁盘上的(源)文件是否需要重新编译——相信内存中的内容。

最近对 ACF 和 Railo 的增强允许您指定(源)文件可以始终检查(不信任),每次请求一次,从不(始终信任)。

这对任何人都不应该是新闻。

显然,ACF 和 Railo 将编译他们被要求处理的任何 .cfm 或 .cfc 文件,因此如果启用,这些文件将“最终”在受信任的缓存中。

如果您 cfinclude 一个文件 - 任何文件 - ACF 和 Railo 也会将其编译为 JVM 字节码(并在磁盘上创建一个 .class 文件,如果配置为这样做)。由于编译了包含的文件,因此它也将“结束”在受信任的缓存中。如果你包含一个 CSS 文件会发生什么?它被编译为字节码,将 CSS 文件的全部内容作为字符串输出到响应流。由于它是一个已编译的类,现在输出一个硬编码的字符串,如果您更改 CSS 源文件并启用了受信任的缓存,ACF 和 Railo 将信任类加载器中的内容而不重新编译它(假设“从不”检查源是管理员环境)。

您可以通过清除 cfclasses 文件夹、重新启动 CFML 引擎并运行代码来验证这一点。您将看到一个 .class 文件出现在您的 CSS 文件中(假设您已启用将类文件保存到磁盘)。

因此,cfinclude 强制编译“任何”文件,并且可信缓存的正常规则适用于加载到内存中的类。

我不再使用 ACF,所以我无法详细说明 .cfr 文件(Railo 不支持报告文件),但这很可能取决于 ACF 是否编译 .cfr 文件。它应该很容易验证(通过查看 cfclasses 文件夹)。

于 2011-11-30T17:34:44.733 回答
5

默认情况下,ColdFusion 附带在 JRun 中映射的 *.cfm、*.cfc 和 *.cfml 扩展作为受信任的扩展。您可以通过在 \JRun4\servers\cfusion\cfusion-ear\cfusion-war\WEB-INF\ 中打开 j2ee-web.xml 和 web.xml 配置文件来查看这些映射(或附近,根据您的安装) :

<servlet-mapping id="coldfusion_mapping_3">
    <servlet-name>CfmServlet</servlet-name>
    <url-pattern>*.cfm</url-pattern>
</servlet-mapping>
<servlet-mapping id="coldfusion_mapping_4">
    <servlet-name>CFCServlet</servlet-name>
    <url-pattern>*.cfc</url-pattern>
</servlet-mapping>
<servlet-mapping id="coldfusion_mapping_5">
    <servlet-name>CfmServlet</servlet-name>
    <url-pattern>*.cfml</url-pattern>
</servlet-mapping>

但是,您也可以在这里手动配置全新的映射,这将允许 ColdFusion 解析/编译具有不同扩展名的文件中的 CFML 标签(我使用过配置为解析 .shtml 的 CF 服务器,例如)

注意:您还必须为您的 Web 服务器做一些额外的配置,无论是 Apache、IIS 还是其他。

一旦 CF 被配置为处理具有特定扩展名的文件,它就会被添加到受信任的缓存中处理的文件列表中——因为该文件最终等同于后台编译的 .class 文件。

于 2011-11-25T18:02:41.380 回答
0

不幸的是,没有此信息的官方来源。但是,通过大量工作,可以测试每个标签以查看文件是否最终在受信任的缓存中。

您的前两个要点分别由Shawn Holmes 的回答Sean Corfield 的回答涵盖。

项目符号 3:cfmodule 仅限于 cfm 文件,因此扩展名是您唯一需要担心的。

项目符号 6:cfreport 不应进入模板缓存,因为它正在转换文件,而不是编译它以执行代码。

于 2012-09-14T21:37:35.550 回答