我听说指向本地服务器的 CFHTTP 调用会给用户带来额外的延迟。由于这是一个 HTTP 请求,在我看来,任何延迟都可以忽略不计——尽管我对网络/系统和负载平衡知之甚少。
使用 CFHTTP 进行本地调用是否有任何缺点/缺点,如果是,有没有办法减轻这些缺点?
我听说指向本地服务器的 CFHTTP 调用会给用户带来额外的延迟。由于这是一个 HTTP 请求,在我看来,任何延迟都可以忽略不计——尽管我对网络/系统和负载平衡知之甚少。
使用 CFHTTP 进行本地调用是否有任何缺点/缺点,如果是,有没有办法减轻这些缺点?
你想用这些 HTTP 调用做什么?如果您通过 HTTP 获取的任何内容都在本地文件系统上,那么实际使用文件系统(fileRead()、include 等)而不是网络来获取它们会更方便。
也就是说,如果您确实出于某种原因确实想要执行请求(在某些情况下这是完全合法的),那么我认为性能开销不会值得担心。虽然我不想在每个onRequestStart()
等上做这种事情。
我认为您需要详细说明您要在这里实现的目标。
在我看来,任何延误都可以忽略不计
也许,这取决于您的流量和您遇到的任何其他延迟问题。我做了一个简单的测试,从同一个 CF 服务器获取了 5 段预先生成的 Lorem Ipsum 虚拟文本。结果需要 15 到 47 毫秒,正如我所说的,这取决于你决定它是否可以忽略不计。我个人认为它有点高,但从用户的角度来看,它在我的环境中不会被注意到。
就缓解而言,如果您尝试重用代码,我会考虑将您的身份验证放入 cfc。这是有益的,因为如果需要,您可以在多个本地应用程序以及 Web 服务中使用它(从技术上讲,这是您通过使用 cfhttp 尝试做的事情)。
正如您之前所说,将进程包含在 cfinclude 中有什么问题?测试证明,包括相同的预生成 Lorem Ipsum 文本每次花费 0 MS。
<cfset start = getTickCount()>
<cfhttp url="http://myServer.com/test/lipsum.cfm" method="get" >
<cfset end = getTickCount()-start>
<cfoutput>it took #end# MS to get the Lipsum.</cfoutput><br />
<cfset start = getTickCount()>
<!-- <cfinclude template="lipsum.cfm"> -->
<cfset end = getTickCount()-start>
<cfoutput>it took #end# MS to include the Lipsum.</cfoutput>
it took 43 MS to get the Lipsum.
it took 0 MS to include the Lipsum.
您没有指定是回调到 ColdFusion 服务器本身还是本地托管的其他服务。稍微扩展一下问题以提供用例可能会有所帮助。
调用本地服务器的速度损失相对较小,并且在某些情况下可能没问题,例如调用本地 Solr 服务器以获取搜索结果。然而,它可能比在 CF 中本地调用函数要慢得多。
我担心的是回调您正在执行 ColdFusion 的服务器。这可能表明事情可以更好地组织或安排。我过去曾这样做过(作为运行后台任务的一种廉价的“愉快的方式”),但现在不会这样做<cfthread>
。