我们有一个创建成千上万个静态文件的进程。每个文件都是从一个需要几秒钟才能运行的查询创建的。每个文件中的数据每周更改一次。这些文件每天提供约500,000次。因此,似乎尽可能高效地命名,存储和检索这些文件是非常有益的。
目前,这些文件的名称如下:
123-111-1.htm
123-112-1.htm
123-113-1.htm
456-111-2.htm
456-112-2.htm
456-133-2.htm
在文件中是普通的旧HTML菜单。此页面中没有处理任何内容。实际上,可能有五十个链接。
<h1>Company Name</h1>
<ul>
<li><a href="index.cfm">some link</a></li>
<li><a href="index.cfm">some link</a></li>
<li><a href="index.cfm">some link</a></li>
<li><a href="index.cfm">some link</a></li>
</ul>
我们包括这样的菜单:
<cfset FileToInclude = "#var1#-#var2#-#var3.htm">
<cfinclude template="#FileToInclude#">
我真正的问题是,将文件保存为txt或html或cfm会有区别吗?使用不同的文件扩展名,服务器会以不同方式处理它吗?如果它有一个txt扩展名,ColdFusion会完全忽略它而不缓存吗?如果它有一个html扩展名,它是否会被处理但是被缓存?
答案 0 :(得分:6)
让我们看看每个选项需要什么
<强> TXT 强>
<cfinclude template="#FileToInclude#.txt">
我们知道内容不是纯文本,因此此文件扩展名不会描述其内容。您可以将Web服务器配置为不显示.txt
个文件。在内部,ColdFusion将处理它,就好像它有标签,这可能不是你所期望的。
<强> HTML 强>
<cfinclude template="#FileToInclude#.html">
这是对内容的更具描述性。网络服务器很可能会尝试显示它。在ColdFusion中,它将处理它,好像它有可能不是你期望的标签
<强> CFM 强>
<cfinclude template="#FileToInclude#.cfm">
这是对正在运行的内容的描述。您可以确保它永远不会作为独立文件运行。因为它具有.cfm
扩展名,所以您希望它由ColdFusion处理。
至于缓存,我认为ColdFusion会对它们进行同样的缓存。
<强>分贝强>
您还应该考虑将数据存储在db
中 <cfquery name="qryMenu" cachedwithin="#CreateTimeSpan(0, 6, 0, 0)#">
SELECT menu
FROM dbo.menu
WHERE section1 = <cfqueryparam value = "#section1#" cfsqltype = "cf_sql_integer">
AND section2 = <cfqueryparam value = "#section2#" cfsqltype = "cf_sql_integer">
AND section3 = <cfqueryparam value = "#section3#" cfsqltype = "cf_sql_integer">
</cfquery>
<cfoutput query="qryMenu">#menu#</cfoutput>
这样您就不必处理数百个菜单文件。您可以将缓存控制到您想要的内容。它可能会减少您服务器上的负载。
答案 1 :(得分:5)
如果包含该文件,CF将解析,编译和处理它。如果文件中没有CFML,这是浪费时间。它还会将生成的编译类放入服务器内存中,这是另一个次要考虑因素,但仍需考虑。
您应该为文件命名文件的内容。这些文件中包含HTML,因此它们应具有.html扩展名。
如果您只想在屏幕上获取文件的内容,只需阅读该文件并输出即可:
<cfoutput>#fileRead("/path/to/file")#</cfoutput>
从ColdFusion 11开始,有一些设置,其中包含非.cfm扩展名的文件在编译时不会被编译,但从CF10起,它们 编译。