ng重复渲染数据花费了太多时间
ng-repeat takes too much time to render data
我知道同一个问题已经发布了很多问题,但没有一个解决方案适用于我的情况。
在调用web服务时,我得到JSON响应。在这个JSON中,大约有2000多个对象,我需要在表上显示这些对象的数据。我想显示表中的所有(2000+(记录,是的,我不能限制或分页,需要在一个页面上显示它(我知道这很愚蠢,但这是业务要求(。我不需要排序或搜索。
数据传输大约为2MB,请求大约在2-4秒内完成,但在页面上呈现数据大约需要10-15秒。
现在,我想要的是加快重复绑定的速度(如果可能的话(,或者在收到数据后立即显示数据,并继续添加,直到显示所有行。
查看下面的代码:
HTML
<table class="table table-bordered table-striped cf">
<thead style="color: #333;">
<tr>
<td>Asset Name</td>
<td>Date/ Time</td>
<td>Location</td>
<td>Ignition</td>
<td>Speed</td>
<td>Heading</td>
<td>Direction</td>
</tr>
</thead>
<tbody>
<tr ng-repeat="cols in tableData">
<td>{{ cols.aN }}</td>
<td>{{ cols.dT }}</td>
<td>{{ cols.Lat }}, {{ cols.Lon }}</td>
<td>{{ cols.I }}</td>
<td>{{ cols.S }}</td>
<td>{{ cols.H }}</td>
<td>{{ cols.D }}</td>
</tr>
</tbody>
</table>
JS-
var ignition_text = '';
var lat = '';
var lon = '';
for (var i = 0; i < data.length; i++) {
if (data[i].ignition = 1) {
ignition_text = "On";
} else {
ignition_text = "Off";
}
$scope.$apply(function() {
$scope.tableData.push({
aN: name,
dT: data[i].eventUTCTime,
Lat: data[i].latitudeDegrees,
Lon: data[i].longitudeDegrees,
I: ignition_text,
S: data[i].speedMPH,
H: data[i].longitudeDegrees,
D: data[i].latitudeDegrees
});
});
}
提前感谢!
您可能根本不需要$scope.$apply
。即使您需要它,也应该只在将所有数据推送到表中后使用它。否则,每个添加的条目都将强制执行摘要循环。只需构建您的数组,并将完成的数组分配给scope变量。然后angular将只构建一次表。
根据变量name
的性质,您也可以消除阵列构建,只使用正在下载的数据。除了name
,您无论如何都只需要使用这些数据。
这里有一个数据大小相似但加载速度更快的plunkhttp://plnkr.co/edit/I4rN1ZMaR3e1mbcsJ9Ka.如果你要快速弹出,我可以使用你的数据并编辑你的代码,但从外观上看,你只需要将主要任务分配到范围,而不需要申请数据并在ng重复中添加一个音轨。SN:您可能希望在for循环中操作数据,然后对作用域进行赋值。
for (var i = 0; i < data.length; i++) {
if (data[i].ignition = 1) {
ignition_text = "On";
} else {
ignition_text = "Off";
}
}
$scope.tableData=data;
JS-
$http.get("largeData.json").then(function(response) {
vm.test = response.data;
});
HTML
<tbody>
<tr ng-repeat="(key, value) in main.test track by $index ">
<td>{{ value.ask }}</td>
<td>{{ value.bid }}</td>
<td>{{ value.volume_btc }}, {{ value.volume_percent }}</td>
<td>{{ value.last }}</td>
<td>{{ value.timestamp }}</td>
</tr>
</tbody>
相关文章:
- 一个html元素的克隆次数太多
- offsetLeft Javascript属性需要更多时间
- ExtJS类的最佳实践最终导致了太多的.JS文件.性能怎么样
- 使用.slice分页选择了太多项目
- 堆排序实现进行了太多比较
- 如何在不每秒调用太多次的情况下通过Soundcloud解析api进行循环
- 如何修复“;太多递归”;ReactJS中的错误
- 为什么fs.readFile在windows上花费太多时间
- 如何避免webGL着色器加载给cpu带来太多负载
- node.js 需要太多的 TCP 套接字
- JavaScript循环迭代太多
- 函数崩溃,因为太多迭代jQuery
- 为什么不'当用户输入空格或字符太多/不够时,此函数会发出window.alert
- Angularjs:为什么重复做太多的工作
- Jquery-append函数花费了太多时间
- 花了太多时间才做出承诺's则起作用
- MongoDB bulk.execute()在无序插入时花费了太多时间
- Jquery加载函数,如果花费太多时间,会出现错误信息
- 动态设置谷歌脚本时间驱动的计时器和太多的计时器错误在gmail
- ng重复渲染数据花费了太多时间