2010-04-23 122 views
4

我們在瀏覽器(IE)中呈現了導致瀏覽器掛起的html頁面。該頁面是通過服務器端腳本生成的(ASP.NET和viewstate已禁用)。加載頁面需要很長時間(因爲我們可以在本地機器上重現它,所以它不是一個問題),並且有時會導致腳本無響應錯誤。在調試問題時,我們發現客戶端的html大小是4.73 MB。文檔準備就緒(jQuery-document.ready)後,還有很多DOM遍歷(使用JQuery)。在加載之後,頁面簡單地掛在任何用戶交互(滾動,鼠標懸停)等上。在加載和任何用戶交互期間看到CPU使用率峯值(25-50%使用)互聯網瀏覽在加載大頁面時無響應

+0

這不是大文件,它是Javascript。你必須優化它,並理解它永遠不會是相同的,但至少它會'功能' – 2010-04-23 09:15:47

+1

我求求不同。這兩者絕對是相關的。文件越大,JS需要處理DOM的時間越長;只是因爲它有更多的節點要處理。 – pyrocumulus 2010-04-23 09:22:59

+0

如果禁用jquery代碼會發生什麼? – 2010-04-23 09:27:21

回答

0

我看的第一件事情是瘋狂大尺寸HTML的客戶端接收。對於大量HTML的快速處理,Internet Explorer並不爲人所知,尤其是在以後進行大量DOM遍歷時。這種大樹的DOM處理解釋了CPU高峯。

真的有必要向客戶端發送如此大量的HTML嗎?

0

這可能會也可能不會幫助你,但是隻有當我看到html頁面遠遠接近這個大小時,纔有人將大量數據寫入js數組進行查找。

也許考慮將一些數據(甚至是html,如果它可以很好地分區)移動到Web服務/ ajax調用?無論如何,查找通常要高效得多。

如果它僅僅是原始的HTML,考慮分割它,只有通過AJAX加載下一個部分,當用戶向下滾動/點擊標籤/等

1

如果「腳本不響應」在加載對話框是一個問題至少在較早的IE版本中可能會受到欺騙。用setTimeout將你正在做的工作分成多個任務。這會導致IE不知道使用了多少總執行時間。

當後臺工作正在進行時,您可以拋出某種「加載」div,這至少會帶來更好的用戶體驗。

+0

檢查http://fitzgeraldnick.com/weblog/35/是一個很好的方法。 – eflat 2012-03-06 21:58:23