LokiJS与标准Javascript对象访问

时间:2016-05-07 01:55:57

标签: javascript arrays performance javascript-objects lokijs

LokiJS如何通过密钥比较标准的javascript对象访问?

var obj = {};

for (var i = 0; i < 10000; i++) {
    obj[i] = { name: 'name', description: 'desc', misc: 'misc' };
    lokicollection.insert({ id: i, name: 'name', description: 'desc', misc: 'misc' });
}

使用LokiJS直接通过密钥访问对象会有什么性能优势吗?

alert(obj[id].name);
alert(lokicollection.by('id', id).name);

使用LokiJS枚举对象是否有任何性能优势?

var item, arr = lokicollection.where(function(obj) { return true });
for (var i = 0; i < arr.length; i++) {
    item = arr[i];
}

var item, keys = Object.keys(obj);
for (var i = 0; i < keys.length; i++) {
    item = obj[keys[i]];
}

1 个答案:

答案 0 :(得分:1)

除了关于开发工具和临时基准测试的非常有效的评论之外,底线是JS中数据结构的性能不容易推广。稀疏阵列不像密集阵列那样执行,混合类型阵列不像单一类型阵列那样执行,因为底层引擎倾向于根据阵列中包含的数据进行智能优化。 LokiJS很快,它被优化为使用更大但更快的迭代(例如for循环而不是forEach)并保持阵列密集,但最终LokiJS在后台做了更多:索引,计算视图,发射事件等。操作来自性能成本,这是简单的阵列插入操作所没有的成本。像LokiJS这样的解决方案的用处在于快速检索过滤/排序数据,以及视图的后台重新计算(以及将数据持久保存到磁盘/ localstorage / indexeddb的能力)。因此,除非您需要持久性并且需要管理大量数据,否则我认为您不会从LokiJS获得性能。这来自写LokiJS的人;)