所以我尝试使用 AngularJS 创建一个无限滚动表,类似于:http://jsfiddle.net/vojtajina/U7Bz9/ http://jsfiddle.net/vojtajina/U7Bz9/
我遇到的问题是,在 jsfiddle 示例中,如果我继续滚动直到有一百万个结果,浏览器就会慢得像爬行一样,不是吗?因为现在会有1,000,000
结果为 $scope.items。例如,如果我只拥有过,那就更好了1000
$scope.items 内一次的结果,而我正在查看的结果恰好在这些范围内1000
.
示例用例:页面加载,我看到第一个10
结果(出自1,000,000
)。虽然我只看到10
, 首先1000
结果实际上已加载。然后我滚动到列表的最底部查看最后一个10
项目。如果我再次滚动回到顶部,我希望顶部10
必须从服务器再次加载结果。
我有一个用 ExtJS 做的项目,有类似的情况:一个无限滚动列表,其中有几千个结果。 ExtJS 处理此问题的方法是加载当前结果页面,然后预加载几页额外的结果页面。但无论何时,都只有10
本地存储的结果页面。
所以我想我的问题是我将如何在 AngularJS 中实现这个?我知道我没有提供太多代码,所以我不期望人们只给出编码答案,但至少会给出一些方向的建议。
有几件事:
无论框架如何,“无限滚动”到“1,000,000”行都可能会出现问题,因为您已经创建了数百万个 DOM 节点(假设每条记录中有多个元素)
您正在考虑使用的实现<li ng-repeat="item in items">{{item.foo}}</li>
或者类似的事情都会有问题very之所以这么快,有一个重要原因:{{item.foo}}}
或任何类似的 ngBind 将设置一个$watch
在该字段上,这会以函数引用等形式产生大量开销。因此,虽然“数组”中的 10,000 个小对象不会那么糟糕......每个对象都有 10,000-20,000 个额外的函数引用10,000 件物品将是。
在这种情况下,您想要做的是创建一个指令来处理添加和删除“太远”超出视图的 DOM 元素,并保持数据最新。这应该可以缓解您可能遇到的大多数性能问题。
...我很遗憾地说,良好的无限滚动并不简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)