[英]Javascript (AngularJS) don't block UI during large DOM update
在我的角度應用程序中,我有一個操作,它有可能在每次運行時向DOM添加數萬個元素(每次用戶將新數據粘貼到文本區域時都會發生)。
有時候,它必須在一個表中添加20,000個表行,它只會阻塞整個頁面(旋轉沙灘球)大約十秒鍾。
有沒有辦法阻止它阻止UI? (除了不將所有元素添加到DOM之外,還有一種方法:因為那是該特定應用程序的核心功能)
我的下一個想法是:如果我隱藏表直到完成所有內存中的DOM操作,然后再次顯示它,該怎么辦?
因為,我知道更新DOM實際上是一個兩階段的過程:1)更新內存中的所有元素,然后2)重新呈現頁面的受影響部分。
在內存中完成DOM操作后是否可以接收回調?
還有其他想法嗎?
提前致謝!
編輯:這是相關的代碼
<table>
<tr ng-repeat="row in enormousArray">
<td ng-repeat="value in row">{{value}}</td>
<tr>
<table>
和javscript:
$scope.someEventsHappen = function(dataString){
var my2DArray = MyService.functionThatProcessesAStringIntoAnArray(dataString);
$scope.enormousArray = my2DArray;
}
注意:1)這些不是我代碼中實際函數和變量的名稱,因此請不要講授任何有關命名約定的內容,以及2)我實際上在代碼中使用了'controller as',但我將其翻譯為$為簡單起見,范圍。
編輯2:經過更多閱讀后,我認為下一步是創建一個自定義指令,以便我可以控制何時以及如何在鏈接步驟中綁定數據。 完成后,如果結果有用,我會在這里發布結果。
嘗試將行添加到對象而不是dom中。 然后,當操作完成時,將所有更改立即放入dom。 如果您一次將每個元素添加到dom,則瀏覽器必須重新解析/重新繪制20,000次。 您應該嘗試在不觸摸dom的情況下搭建桌子。
要在加載時隱藏DOM元素,可以使用ngCloak。 但是,您正在做的不是正確的方法。 如果要加載“成千上萬”個元素,則不會給用戶一種以有用的方式查看頁面的祈禱。 您需要弄清楚他們真正需要看什么,以及如何以一種有意義的方式交付它。 沒人以任何理由在網頁上查看超過2萬條記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.