1

我想要:

  • 在每一页上,
  • 检查文件是否存在
  • 如果为 TRUE,则包含该文件

IE:

 <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);
}
4

6 回答 6

2

我有同样的问题,因为我有一个包含数百个项目的列表,其中每个项目都与一个或多个文件相关。我想检查每个文件的存在以进行概述。因为我在这里没有找到答案,所以我在列表中勾选了 FileExists 函数,结果是:“7,876 个文件的总执行时间 FileExits:0.11 秒。”

我认为 FileExits 的速度绝对没有问题。

于 2012-02-05T13:53:54.907 回答
1

根据流量,可能会对性能产生一些影响。

您能否将 include 语句放在 try/catch 中或失败,也许将检查结果保存在会话中,然后每个会话的每个文件只执行一次检查?

于 2010-06-17T15:38:47.690 回答
0

我认为更好的方法是检查 variables.include 结构中是否存在标头变量:

<cfif structkeyexists(variables.includes, "header")>
  <cfinclude template = "#variables.includes.header#">
</cfif>

如果页面不使用标题,则在您的页面代码中删除标题:

<cfset structdelete(variables.include, "header", false)>
于 2010-06-17T16:49:09.357 回答
0

问题:您将如何 cfinclude 包含返回的绝对文件路径的文件ExpandPath("_inc_header.cfm")

无论如何,您的问题应该听起来像“ExpandPath + FileExists 的 ColdFusion 速度成本”,因为每次调用两个函数。

如果没有基准测试就无法帮助您,但是可以使用类似于 rip747 提出的东西。但是我会在某个早期阶段(至少在应用程序启动时,可能在开发过程中)收集可用的头文件,并使用该集合进行检查。集合键可以是当前目录路径,或者可能是唯一的小节代码(如果有)。

于 2010-06-17T16:56:30.677 回答
0

我可能会创建一个名为 application.header 的应用程序变量,并从标题中放入 html。

然后在每个应用程序中,我可以同时检查 isdefined 和 if not 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>

你去吧..

于 2010-06-24T21:59:02.367 回答
0

我曾经像你一样思考,但我也严格监控我的执行时间。由于更改为每个请求多次调用 FileExists 的系统,我注意到加载页面所需的毫秒数相差 0ms。完全有可能对给定文件的任何频繁查找都会导致它被缓存在系统或 SCSI 驱动程序或驱动器硬件中的某个位置。SCSI 硬件上的查找时间更有可能是亚毫秒级的。

鉴于我大量使用 cfinclude,因此雷达上甚至没有显示更多查找也就不足为奇了。

现实情况是,它可能比变量查找有更多的开销,但我们可能会谈论 0.0001 毫秒的差异,除非您在目录中有数百万个文件,或者您正在使用 IDE 磁盘运行网络服务器或类似的愚蠢行为。除非您是 /.否则额外的代码复杂性可能不值得节省。或者苹果什么的。

对于那些说这是糟糕的建筑的人,我不敢苟同。从中长期来看,您可以购买比开发人员时间便宜得多的处理器。拥有一个只需要更改文件的系统比更改文件和变量更简单 - 并处理额外的复杂性。像优化类别中的大多数事情一样,许多节省一些 MS 的任务可能会占用几个小时,这些时间可以花在更有效的措施上,比如改进缓存。

于 2010-07-29T05:05:17.783 回答