【问题标题】:LokiJS vs Standard Javascript Object AccessLokiJS 与标准 Javascript 对象访问
【发布时间】:2016-09-02 04:42:09
【问题描述】:

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]];
}

【问题讨论】:

  • 拿去测量。如果你不能可靠地测量它 - 那没关系。
  • 您可以使用浏览器的开发者工具或本地分析工具来比较性能。这是为您感兴趣的环境获得可靠答案的唯一方法。

标签: javascript arrays performance javascript-objects lokijs


【解决方案1】:

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

【讨论】:

  • 哇!您是否会认为 10,000 个项目(每个项目 10 个字段)是一个“负载”数据?顺便说一句,干得好!
  • @Dude2TheN 是的,看起来有很多数据!谢谢!
  • 所以我在想,在枚举整个集合时,item=arr[i]; 可能会特别慢。行,因为每次迭代都必须查找对象属性。关于如何使用 Loki 提高性能的任何想法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 2018-03-25
相关资源
最近更新 更多