2014-03-26 56 views
1

我用下面的方法加載外部HTML文件到一個DIV:在後臺線程中將HTML加載到Div中?

var docName = name + ".html"; 
    $("#displayPanel").load(docName); 

然後我打電話getScript加入的JavaScript文件控制的是HTML文件,像這樣:

docName = name + ".js"; 
    $.getScript(docName, function(data, textStatus, jqxhr) { 

     if (textStatus==="success") { 
      lightItUp(); //load method 
     } 
    }); 

它加載正確。

問題是,對於大型HTML/JS文件,DOM被凍結,用戶交互被禁用,直到加載完成。是否有可能將div加載到「後臺線程」並收到完成通知?

+1

聽起來像[Web Worker]的工作(https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers)。您可以讓Web Worker解析HTML,然後使用消息批量將HTML注入父網頁 – CodingIntrigue

+1

我相信jQuery.getScript()是異步的,並在「後臺線程」中加載腳本。 – blue

+1

你是否設置全局ajax同步或什麼? '.getScript()'不應該凍結用戶界面,看起來問題來自'lightItUp()'而不是顯然你錯誤地解釋了你看到的行爲。順便說一句,你不需要檢查'textStatus',你已經在成功回調中設置了代碼。編輯:我不知道你期望有關'textStatus'檢查 –

回答

1

不知道我是否正確理解你的問題。

如果您想使div在後臺線程中加載並在完成時收到notif,您可以先設置div display:none,並在回調中使其爲display:block

$("#aDivInDisplayPanel").load(docName, function() { 
    //load completed. 
    $(this).fadeIn(); 
}); 
1

您是否考慮過使用HTML5 Web Workers?

http://www.w3schools.com/html/html5_webworkers.asp

當在HTML頁面中執行腳本,直到腳本完成的頁面不響應 。

網絡工作者是一個JavaScript,它獨立於其他腳本運行在後臺, ,而不會影響頁面的性能 。你可以繼續做任何你想做的事情:點擊, 選擇東西等,而網絡工作者在後臺運行。

+1

僅供參考,與W3Schools的鏈接通常因以下原因而不被接受:http://www.w3fools.com/ - 您應該鏈接到更有聲譽的來源,例如MDN:https://developer.mozilla.org/en- US/docs/Web/Guide/Performance/Using_web_workers – CodingIntrigue

+0

我將重點放在板上。 HTML5 Rocks如何:http://www.html5rocks.com/en/tutorials/workers/basics/ – James

+0

這也是一個非常好的資源,雖然博客信息可以很快過時。 – CodingIntrigue

1

除非你讓AJAX同步不知何故,上面的代碼不能,除非瀏覽器需要很長的時間來處理HTML(IE 6.6可能需要1-2分鐘來解析HTML載入這種方式)阻止用戶界面或你在lightItUp()有一些需要很長時間的東西。

下一步是啓動瀏覽器的性能工具並檢查時間。您在上面發佈的代碼看起來是正確的,不應該引起您所描述的內容。

相關問題