2010-04-27 65 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