我想:
即:
<cfset variables.includes.header = ExpandPath("_inc_header.cfm")>
<cfif FileExists(variables.includes.header)>
<cfinclude template = "_inc_header.cfm">
</cfif>
这是个好主意吗?
已修改仅使用“_inc_header.cfm”作为模板
替代实际用途类似于这个PHP代码:
foreach (glob("includes/*.php") as $inc) {
require($inc);
}
答案 0 :(得分:2)
我有同样的问题,因为我有一个包含数百个项目的列表,其中每个项目与一个或多个文件相关。我想检查每个文件的exitsnts以获得概述。因为我没有在这里找到答案,所以在我的列表中勾选了FileExists函数,结果是:“执行时间总共7,876个文件:0.11秒。”
我认为速度绝对不是FileExits的问题。
答案 1 :(得分:1)
根据流量的不同,可能会受到一点性能影响。
你能将include语句放在try / catch中还是失败了,可能会在会话中保存检查结果,然后每个会话只检查一次文件?
答案 2 :(得分:0)
我认为更好的方法是只检查variables.include结构中是否存在头变量:
<cfif structkeyexists(variables.includes, "header")>
<cfinclude template = "#variables.includes.header#">
</cfif>
如果页面不打算使用标题,则在页面代码中删除标题:
<cfset structdelete(variables.include, "header", false)>
答案 3 :(得分:0)
问题:如何使用ExpandPath("_inc_header.cfm")
返回的绝对文件路径来包含文件?
任何方式,您的问题应该听起来像“ColdFusion加速ExpandPath + FileExists的成本”,因为每次调用两个函数。
没有基准测试无法帮助您,但可以使用类似于rip747提议的内容。但我会在一些早期阶段(至少在应用程序启动时,可能在开发过程中)收集可用的头文件,并使用该集合进行检查。集合键可以是当前目录路径,也可以是唯一的子段代码(如果可用)。
答案 4 :(得分:0)
我可能会创建一个名为application.header的应用程序变量,并从标题中输入html。
然后在每个应用程序中,我可以检查isdefined和if null.
例如:
在application.cfm
中<cfparam name="application.header=" default="">
<cfset application.header="<img src=/images/logo.png alt='Logo' border=0>" />
在您的应用页面中。
<cfif isdefined("application.header") and application.header gt "">
<cfoutput> #application.header# </cfoutput>
</cfif>
然后你去..
答案 5 :(得分:0)
我曾经像你一样思考,但我也会严格监控我的执行时间。由于每个请求更改为多次调用FileExists的系统,因此我注意到加载页面所需的毫秒差异为0ms。这完全可能比在给定文件上的任何频繁查找都会导致它被缓存在系统或SCSI驱动程序或驱动器硬件中的某处。它更可能是SCSI硬件上的查找时间是亚毫秒。
鉴于我大量使用cfinclude,并不会出现更多的查询甚至没有出现在雷达上。
实际情况是,它可能比变量查找有更多的开销,但我们可能会谈论0.0001毫秒的差异,除非您在目录中有数百万个文件,或者您正在运行IDE磁盘上的网络服务器或类似的东西。额外的代码复杂性可能不值得节省,除非你是/。或Apple或其他东西。
对于那些说它的建筑很差的人,我不敢苟同。从中长期来看,您可以购买比开发时间便宜得多的处理器。拥有一个只需要更改文件的系统比更改文件和变量更简单 - 并且处理额外的复杂性。与优化类别中的大多数内容一样,许多节省一些MS的任务可能会花费数小时才能用于更有效的措施,例如改进缓存。