在多个文件中使用cfhttp需要花费太多时间

时间:2010-04-27 19:06:43

标签: coldfusion cfhttp

我不知道它是否可能,但只是想询问我们是否可以cfhttp或任何其他东西来读取选定数量的数据而不是将整个文件放在CFHTTP.FileContent中。

我正在使用cfhttp并且只想从远程xml文件中读取最后两行(大约20个)并从一些文本文件中读取中间两行(大约7个)。有没有什么方法可以读取特定数据而不是获取所有文件,因为它现在花了很多时间(约15-20秒)。我只想减少.cfm页面的运行时间。 任何建议???

3 个答案:

答案 0 :(得分:5)

嗯,实际上没有任何特殊方法可以获得部分远程文件。

你每次都必须这样做吗?你能在后台获取文件,在本地写它们,并让你的实际传入请求只读取这些文件吗?使远程文件的读取与传入请求异步?

如果没有,并且您正在使用CF8 +,您可以使用CFTHREAD来线程化并行运行的各种请求:http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_t_04.html

您最后可以使用“join”操作来等待所有线程完成。

编辑:

这是Ben Nadel关于使用CFThread并行化CFHTTP请求的精彩教程:

http://www.bennadel.com/blog/749-Learning-ColdFusion-8-CFThread-Part-II-Parallel-Threads.htm

但还有别的东西:

27-30个连续的http请求不应该花费20-30秒。它真的不应该需要1-2秒 - 所以你可能会遇到一些严重的其他问题。

答案 1 :(得分:3)

HTTP无法以这种方式读取文件。这与ColdFusion无关。

你可以使用一些智能缓存来减少时间,但是第一次使用CFHTTP的方法=“HEAD”运行它时会花费更长的时间。

您是否拥有该页面的本地副本?

  • 不,使用CFHTTP方法=“GET”来抓取并存储它
  • 是的,使用CFHTTP方法=“HEAD”检查时间戳并将其与缓存版本进行比较。如果缓存更新,请使用它,否则使用CFHTTP方法=“GET”来获取和解析所需的文件。

method =“HEAD”只会抓取http标头而不是整个文件,这样可以加快速度。无论哪种方式,你都要发出近30个文件请求,所以无论你是什么方式都不会立即这样做。

答案 2 :(得分:0)

请问CF只用URL params服务那个文件块?

因为它是XML,我猜你可以使用xmlSearch()并只返回结果吗?

对于文本文件,你可以传入startline& numOfLines并仅将这些行返回为字符串?