2010-04-27 64 views
3

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

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

回答

5

嗯,没有真正的任何特殊的方式来获得远程文件的一部分。

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

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

您可以使用“加入”行动进行到底,使等待所有线程来完成。

编辑:

这里是一个伟大的教程由本·纳德尔使用CFThread并行CFHTTP请求:

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

还有别的东西,但:

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

+0

缓存当然可以帮助,特别是如果文件可以缓存,所以他们不必都在同一页面加载更新。如果所有的25-30个电话都必须同时进行,那么CFTHREAD绝对是您的选择。 – 2010-04-27 21:01:54

3

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

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

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

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

method =“HEAD”只会抓取http标头,而不是整个文件,这样会稍微提高速度。无论哪种方式,你都可以提出将近30个文件请求,所以这种方法不会以你的方式进行。

0

如何让CF只用URL参数来提供该文件块?

既然是XML,我猜你可以使用xmlSearch()并只返回结果?

至于文本文件,你可以通过启动& numOfLines并只返回那些行作为字符串?

+0

我不认为我们可以在文本文件的情况下将startlien和noOfLines作为参数传递给cfhttp。 – 2010-04-28 18:57:07

+0

我正在考虑使用REST调用远程CF服务器。只有远程服务器http服务器? – Henry 2010-04-28 19:05:46