无限滚动与Angularjs和猫鼬 - 性能
Infinite scroll with Angularjs and Mongoose - performance
我有一个使用MongoDB使用MongoDB使用Mongoose和Expressjs的$http.get()
获得的图像列表。
我所做的工作正常,但我对性能有疑问。
到目前为止,我找到了两种方法:
- 使用
skip
- 使用
$nin
查询如下所示:
// Using $nin:
var skip = req.query.skip || [];
User.find({ _id : { $nin: skip }})
.sort({ _id: -1 })
.limit(15)
.exec(function(err, users) {
if (err) res.json({ 'msg': 'Error loading users' });
res.json({
users: users
});
});
和:
// Using skip
User.find({})
.sort({ _id: -1 })
.skip(15)
.limit(15)
.exec(function(err, users) {
if (err) res.json({ 'msg': 'Error loading users' });
res.json({
users: users
});
});
谷歌搜索它似乎在一段时间后使用skip
缺乏性能......
但是看看我在滚动和滚动一个很长的查询后发现的$nin
选项......有很多_id
...
两种解决方案中的哪一种应该更好用?
或者还有第三种方式比这些好得多,也许我做错了什么?
谢谢
理想情况下,您希望将$nin
与以前看到的_id
值列表一起使用,但将其与正在排序的内容上的$gte
或$lte
(取决于顺序)运算符结合使用。
大多数"其他排序的查询"通常都是这种情况,但是在_id
字段是您正在排序的字段(并且按递减顺序)的情况下,只需与$lt
一起查找小于上一页"上次看到的值"的值。
因此,在迭代时,将最后一项的"上次看到的值"存储在"页面限制"结果中,然后在后续查询中使用 $lt
运算符:
即:
var lastSeen = null; // declare in a global or session or something
User.find({})
.sort({ "_id": -1 })
.limit(15)
.exec(function(err,docs) {
lastSeen = docs.slice(-1).id;
});
然后:
User.find({ "_id": { "$lt": lastSeen })
.sort({ "_id": -1 })
.limit(15)
.exec(function(err,docs) {
lastSeen = docs.slice(-1).id;
});
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 提高JQuery的性能
- 幻灯片滚动javascript不起作用
- 将视口底部滚动到元素底部
- jQuery Lazy加载动画滚动
- 设置滑块分区上的滚动
- 结合jQuery和jetpack无限滚动
- 无限滚动与Angularjs和猫鼬 - 性能
- Android Web 视图中的非本机滚动条性能
- 如何在retina设备的webview中提高webapp的滚动性能
- CSS/JS滚动故障效果(性能)
- 将多个事件处理程序绑定到滚动事件是否会影响性能
- jQuery视差/滚动事件性能
- 浏览器滚动条动画性能
- fullpage.js + handsOnTable.js在滚动时性能较慢
- Javascript性能:固定表头&滚动栏
- Angular 2 RC 5 Internet Explorer 10的滚动性能很差
- 避免在滚动时重新渲染并提高 React Web 应用程序的性能
- 加载更多的数据到html模板上假页面滚动,性能问题
- 如何提高JS的滚动性能