3

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

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

4

3 回答 3

5

嗯,并不是任何特殊的方式来获取远程文件的一部分。

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

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

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

编辑:

这是 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 秒 - 所以你可能会在这里遇到一些严重的其他问题。

于 2010-04-27T19:53:39.863 回答
4

HTTP 不具备以这种方式读取文件的能力。这与 ColdFusion 无关。

您可以使用一些智能缓存来减少时间,但在第一次使用 CFHTTP 的 method="HEAD" 时会花费更长的时间,但事实并非如此。

您有该页面的本地副本吗?

  • 不,使用CFHTTP method="GET" 抓取并存储
  • 是的,使用 CFHTTP method="HEAD" 检查时间戳并将其与缓存版本进行比较。如果缓存较新,请使用它,否则 CFHTTP method="GET" 获取并解析您想要的文件。

method="HEAD" 只会抓取http头而不是整个文件,这会稍微加快速度。无论哪种方式,您都会发出近 30 个文件请求,因此无论您如何削减它,这都不会是即时的。

于 2010-04-27T20:33:47.073 回答
0

让 CF 只提供带有 URL 参数的文件块怎么样?

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

至于文本文件,您可以传入 startline 和 numOfLines 并仅将这些行作为字符串返回?

于 2010-04-27T21:35:51.967 回答