当我想从 Meteor 应用程序迭代存储在 MongoDB 中的一组文档时,我可以使用
db.collection.find( ... ).forEach( function f( doc ){ ... })
or
var docs = db.collection.find( ... ).fetch();
_.each( docs, function f( doc ){ ... }); // using underscore.js
从性能角度来看哪种方式更可取?这两种选择都有哪些优缺点?
这两个语句在核心 API 级别上执行的操作基本相同,即获取光标并转换结果。然而,性能方面存在一个“核心”差异:
因此,无论如何,在执行从查询游标获取的“核心”操作方面实际上都不是“更快”。然而,不在每次游标迭代上计算“表达式”“可能”稍微快一些,所以.fetch()
可能会在这里赢得“一点”。
当然,最大的问题是“所有内容现在都在内存中”,因此需要考虑这样做的“开销”。还有,当时.fetch()
the _.each()
俗话说,尚未处理。“你在秋千上“获得”的东西,在环岛可能“失去”的东西”.
如果没有对具体案例进行全面的基准测试,“时机”可能会相似。除非专门应用您正在使用的数据集的大小,否则通用基准测试几乎毫无用处。
因此一般情况就出来了,“差不多”,但是使用.fetch()
将会消耗更多内存而不仅仅是从头开始迭代游标。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)