此問題與我之前詢問過的問題有關,請參閱here。關於分割AJAX響應的進一步問題
,以此來實現分段Ajax響應,我創建了執行此代碼:
客戶端首先調用其初始化過程的腳本。在服務器端,startScript.cgi代碼開始生成數據,並且這樣做時,它將響應分組爲塊,並將它們按順序編入索引的單個文件(chunk1.txt chunk2.txt等)。在startScript.cgi啓動這個過程之後,客戶端立即開始第二個ajax請求,發送到gatherOutput.cgi,參數?index = 0。
gatherOutput.cgi看到請求,然後查看'chunk'。$ index。'。txt',然後返回數據。客戶端將其輸出到html,然後開始第二個ajax請求,收集具有參數?index = 1的gatherOutput.cgi,等等,直到所有來自startScript.cgi的數據都被報告。
如果gatherOutput.cgi無法找到「塊$ index.txt」,它進入這個循環:
until(-e "$directory/chunk$index.txt")
{
#nothing
}
open $fh, "<$directory/chunk$index.txt" || warn "File not found. blah blah";
#Read file and print, etc...
注意,startScript.cgi運行的代碼可能需要很長的時間才能完成,所以點將同時廣播startScript.cgi的舊輸出,因爲它正在生成新的輸出。
這樣做的問題是性能受到影響,儘管很久以前創建了輸出,但輸出需要一段時間才能出來。我假設這是由於硬盤訪問與startScript.cgi中的CPU操作相比非常慢,所以gatherOutput.cgi經常等待新的塊寫入,或者客戶端經常在等待gatherOutput.cgi讀取文件等等。雖然可能還有其他問題。
有沒有人有任何想法或建議來解決這個問題?或者如果有人對這個問題有不同的解決方法,那也會很棒。
順便說一句,startScript.cgi只能被調用一次,它會啓動一個大任務系統任務(帶有系統轉義,如exec,系統或反引號),這些任務會持續運行,並且無法被細分。
好主意,我會實現這一點,看看它提高了多少性能。 謝謝! 任何進一步的建議仍然讚賞。 – 2010-08-03 16:53:52