当前位置: 首页 > 面试题库 >

如何在庞大的数据集(angular.js)上提高ngRepeat的性能?

蓟和煦
2023-03-14
问题内容

我有一个巨大的数据集,其中包含数千行,每个行具有大约10个字段,大约2MB的数据。我需要在浏览器中显示它。最简单的方法(获取数据,将其放入$scopeng- repeat=""执行其工作)可以很好地工作,但是当它开始将节点插入DOM时,它会使浏览器冻结大约半分钟。我应该如何解决这个问题?

一种选择是将行逐行追加,$scope并等待ngRepeat完成向DOM中插入一个块后再移至下一个。但是AFAIK
ngRepeat在完成“重复”操作时不会返回报告,因此会很丑陋。

另一种选择是将服务器上的数据拆分为页面,然后在多个请求中获取它们,但这更加丑陋。

我浏览了Angular文档以查找类似的内容ng-repeat="data in dataset" ng-repeat- steps="500",但没有找到任何东西。我对Angular的方法还很陌生,所以有可能我完全没有注意这一点。最佳做法是什么?


问题答案:

我同意@ AndreM96的观点,最好的方法是只显示有限数量的行,更快更好的UX,这可以通过分页或无限滚动来完成。

使用limitTo过滤器,使用Angular进行无限滚动非常简单。您只需要设置初始限制,当用户要求提供更多数据时(为简便起见,我使用按钮)就可以增加限制。

<table>
    <tr ng-repeat="d in data | limitTo:totalDisplayed"><td>{{d}}</td></tr>
</table>
<button class="btn" ng-click="loadMore()">Load more</button>

//the controller
$scope.totalDisplayed = 20;

$scope.loadMore = function () {
  $scope.totalDisplayed += 20;  
};

$scope.data = data;

这是一个JsBin。

这种方法对于手机可能是个问题,因为通常在滚动大量数据时它们会滞后,因此在这种情况下,我认为分页更为合适。

为此,您将需要limitTo过滤器和自定义过滤器来定义所显示数据的起点。

这是带有分页的JSBin。



 类似资料:
  • 问题内容: 我在公司中多次设计数据库。为了提高数据库的性能,我只寻找标准化和索引。 如果要求您提高数据库的性能,该数据库包含大约250个表以及一些具有数百万个记录的表,那么您将寻找什么不同的东西? 提前致谢。 问题答案: 优化逻辑设计 逻辑级别是关于查询和表本身的结构。首先尝试最大程度地发挥这一作用。目标是在逻辑级别上访问尽可能少的数据。 拥有最高效的SQL查询 设计支持应用程序需求的逻辑架构(例

  • 本文向大家介绍Angular.js中$resource高大上的数据交互详解,包括了Angular.js中$resource高大上的数据交互详解的使用技巧和注意事项,需要的朋友参考一下 本文主要给大家介绍的是关于Angular.js中$resource数据交互的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: $resource 创建一个resource对象的工厂函数,可以让你安全的和R

  • 有没有一种方法我可以用某种方式迭代光标我可以暂停它,然后再继续?MongodbCursor保存最后访问的项目?我只知道foreach迭代,但是否有一些像这样的迭代? 如果有类似的东西存在,我可以保存查询的最后一个项目。提前致谢

  • 问题内容: 我有一个庞大的3D点数据集(约190万行)可供选择。我最常使用的语句类似于: 我有关于x,y和z以及otherParameter的索引。我也尝试将多部分索引添加到x,y,z,但这没有帮助。 关于如何使此查询更快的任何建议? 问题答案: 索引对于这种查询没有多大帮助。 您需要什么作为索引以及对其进行最小限度的平行六面体查询。 不幸的是,仅不支持对点的索引。但是,您可以在创建索引时,比方说

  • 我们正在快速开发一个应用程序,其中我们需要一次获取超过50K行(在应用程序加载时执行),然后数据将用于应用程序的其他部分进行进一步计算。我们正在使用Firebase实时数据库,我们面临一些严重的性能问题。 它目前需要大约40秒才能加载50K行(目前使用的是免费数据库版本,不确定这是否是原因),但我们也观察到,当多个用户使用该应用程序时,加载50K行开始需要大约1分20秒,Peak达到100%。 您

  • 问题内容: 我有一个相当大的InnoDB表,其中包含约1000万行(并且不断增长,预计它将变成该大小的20倍)。每行不是那么大(平均131 B),但是我不得不不时删除其中的一大块,这需要很长时间。这是表结构: 从表中删除大块的查询就像这样: 这样的查询只花了将近一个小时的时间。我可以想象索引重写开销使这些查询非常慢。 我正在开发一个将在现有数据库上运行的应用程序。我很可能无法控制服务器变量,除非我