簡體   English   中英

Javascript(AngularJS)在大型DOM更新期間不會阻止UI

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM