2011-08-25 141 views
0

我已經創建了這個遞歸腳本,用於檢查你的地址,然後檢查另一個文件層次結構,如果該文件夾位於該文件夾中,該文件夾也存在於該地方。例如,假設您位於somerandomsite.com/example/folder/folder1/folder1_1,然後您可能需要將用戶重定向到somerandomsite.com/ 另一個/example/folder/folder1/folder1_1(如果該文件夾存在),否則只是將他重定向到somerandomsite.com/another(當然,我也有一些特殊情況,比如如果folder/folder1 /存在但不是folder/folder1/folder1_1,那麼重定向到somerandomsite.com/ 另一個/example/folder/folder1 /等有沒有辦法告訴webbrowser繼續「卡住」腳本?

現在到我的問題,我有一個真正的慢遞歸實現,並說有50個文件夾中的「示例」,100文件夾中的文件夾,另一個文件夾中的文件夾1和最後100個文件夾最後級別,那麼我的實現需要很長時間來「匹配」所有的名字。

因此,一些瀏覽器顯示「某些腳本已停止工作」的錯誤消息,因爲它需要很長時間才能執行。所以我的問題是,是否有某種方式告訴瀏覽器讓腳本完成?

你可以找到the script here的編碼。

對於那些創建我如何執行目錄搜索的人來說,即時消息創建xmlhttprequests文件夾,並獲得一個html版本顯示所有的文件夾,然後爲每個文件夾級別做一個簡單的模式匹配。在上面的例子中我做4周的XMLHttpRequest,

一到somerandomsite.com,patternmatch爲「示例」

一至somerandomsite.com/example/ patternmatch爲「文件夾」

一個到somerandomsite.com/example/folder/ patternmatch爲「文件夾1」

一到somerandomsite.com/example/folder/folder1/ patternmatch爲「FO lder1_1"

+1

我沒有解決您的問題的方法,但我確實認爲您正在採取艱難的方式。不幸的是,我不完全瞭解你的問題,所以我不能提出任何具體的建議。我的直覺說,這應該是服務器端處理,或者你應該建立一個目錄結構的XML/JSON /文本地圖,並解析它。 –

+0

難道你不能把你的算法分成幾個步驟,並用settimeout把它們連在一起?這樣瀏覽器就有機會不時呼吸。 – reto

回答

3

號這個功能是明確設計爲慢速腳本,你承認你是。用戶決定是否繼續。如果有逃生艙,各種有害的腳本都會使用它。

0

不需要。請使用Web Workers來完成工作。但要小心與舊版瀏覽器的兼容性。

1

我懷疑這將與AJAX調用來實現,因爲沒有運行時請求時沒有實際的腳本。你是積極的,你沒有任何代碼中的無限循環。

哦,有一個與你的代碼有問題:

handleXMLreadystatechange事件處理程序,並呼籲checkState which spawns a timeout to call itself every second. So every time the state changes you spawn another repeating checkState.

你不需要checkState調用自身,因爲handleXML已經調用它,每當狀態改變時都會調用它。另外,如果返回的狀態不是200,checkState將自行調用它自己。我認爲,如果您將checkState函數更改爲:

var checkState = function(xmlhttp, callback) { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     callback(); 
}; 
+0

編輯。感謝您的反饋。但它仍然緩慢,如何改進腳本的任何其他想法? =) – Alex

1

好主,請在服務器上執行此操作。您已經「在目錄中獲得httprequest目錄列表」 - 只需在服務器上完成整個任務。

0

該腳本正在這樣做,因爲很多事情正在發生。

等待開始一個新的xmlhttprequest,直到前一個完成。

其他然後使用更快的瀏覽器,你不能強制腳本繼續運行。

+0

如何使用遞歸腳本完成此操作?我嘗試過「瀑布」模型,但那不是遞歸的,一個又一個地調用一個函數?謝謝=) – Alex

相關問題