2011-12-19 132 views
-1

我想在document.ready中使用jquery執行ajax.get。但get似乎阻止瀏覽器。ajax調用document.ready阻止瀏覽器

虛設例如: http://jsfiddle.net/gauravshah/HpfXL/

我試圖執行得到的document.ready,結果需要大約15-17秒的時間內服務器上生成。所以在那之前瀏覽器似乎被阻止了。對於前景背景圖像不生動。

其次,在IE 8瀏覽器掛起,直到收到請求。

類似的問題:Simple ajax call seems to be blocking 建議爲通話使用延遲,但爲什麼要使用延遲?我沒有找到正確的解決方案。

我的實際代碼:(不知道這將是有幫助)

$(document).ready(function(){ 
feat_id = "feat-2222" 
$.post('/features/creator/get_existing/'+feat_id, { 
     "url":url, 
     'path':path, 
     'parentURL':parentURL, 
     'index':index 
    },function(data){ 
     var new_id = $(data).attr('id') 
     $(data).find('.featureLocation').html($(data).find('.featureLocation').html()); 
     $(obj).replaceWith(data) 
    }) 
}); 
+0

是您的Ajax調用同步或臺異步?你的jsFiddle擁有40個同步的ajax調用 - 這是怎麼回事? – jfriend00 2011-12-19 06:24:24

+0

默認情況下ajax調用是異步的...我想要模擬加載數據需要一些時間。但由於get不能在域外執行請求,我正在調用一些40個Ajax請求fom jsfiddle。我在服務器上的實際腳本大約需要15秒來計算..所以想要通過發出40個請求來模擬至少2-3秒 – 2011-12-19 06:26:42

+0

在我看來,這不是一個非常有用的模擬,因爲不同的問題將發揮作用(如最大數量連接允許一次打開)。如果您的ajax調用確實是異步的,並且響應的處理不耗費時間,並且您沒有在等待響應的任何地方循環,那麼瀏覽器應該完全活動,但是我們需要查看您的真實代碼以向您提供想法。我建議向我們展示您的真實代碼,而不是與您的真實代碼沒有任何共同之處。 – jfriend00 2011-12-19 06:30:16

回答

1

在同一解決方案作爲抵貼在類似的問題

jQuery(document).ready(function() { 
    setTimeout(function() { 
    $.getJSON("veryLongRequest", function(json) { 
    alert("JSON Result: " + json[0].id);}); 
    }, 500); // You may need to adjust this to a longer delay. 
}); 

Simple ajax call seems to be blocking

0

我懷疑有一個小不僅僅是一個「沉重」的查詢更會在這裏。 See this article用於改善JavaScript性能。 Javascript本身,尤其是當我們加載類似jQuery的庫時,對於瀏覽器來說可能是「龐大的」。添加諸如您建議的查詢以及應用程序或網站的感知響應時間可能會對用戶造成不利影響。

毫無疑問,JavaScript文件會阻塞你的http加載,如果做得不好,並且廣泛濫用javascript文件。只加載必要的東西。只加載縮小的文件。如果可能,合併。最後,要知道任何15秒的查詢都會出現一個困境....查詢會一直執行,直到完成後再顯示信息。如果你正在做一個特別沉重的查詢,瀏覽器要麼堵塞,要麼等到有一些東西要加載。所以,考慮攻擊查詢和顯示模式本身。

一旦我確定基於上面的文章的教導有效地調用了我的Javascript,我會停下來一分鐘,並考慮我的Ajax查詢。服務器端的查詢是否是最有效的查詢?有沒有辦法可以分解數據的加載,例如server-side, pipelined datatable這樣,您只需加載用戶可以合理查看的信息,然後讓他們做一個單獨的ajaxed get以獲取更多信息,重新準備好,增加感知響應時間。

此外,雖然我幾乎總是使用文件準備dom加載程序,如上所示,嘗試一次,沒有一次.....運行一些測試用例。當IE 6肆虐時,Dom裝載機非常棒。對於大多數較新的瀏覽器,加載問題已經在很大程度上被克服。

我是一個SAAS應用程序的UI開發人員,他定期處理數百萬條記錄....所以這對我來說每天都是一個難題。我發現以「一次一件」的方式查看數據的方式最有效地使得最有效的接口。

+0

在我的實際情況中,我只是從服務器加載一個約100個字符的文本字符串..只有服務器部分的計算是沉重的..不是可以理解的數據量 – 2011-12-19 06:32:06

+0

,但無論UI世界中的15秒是永恆的。無論如何,這將是一個薄弱環節。這是一種奇特的加入?你能索引速度嗎?性能如何調整查詢本身?作爲替代,寫一個測試函數,不做任何計算,只是吐出一串......是延遲加載仍然是一個問題? – bpeterson76 2011-12-19 06:34:51

+0

我不能改變計算,這很好..我的用戶知道它,它不能被幫助。是的,我嘗試立即返回虛擬文本,然後瀏覽器似乎回覆完美。 – 2011-12-19 06:37:08