【问题标题】:Assign large ammount of Models to a Collection将大量模型分配给集合
【发布时间】:2012-09-06 16:09:33
【问题描述】:

我有一个包含 ~1200 个对象的数组,我想将其分配给一个集合,但我总是超时。

我试过这个(我承认不是很优雅):

_.each(mightyArray, function(mightyArrayItem){
  BigCollection.create(mightyArrayItem);
});

这可行,但速度太慢了:-(

编辑

也许我走错了路。我正在使用backbone-localstorage.js 而不是某种远程数据库,所以可能是localStorage 本身正在减慢一切?

编辑 2

我认为问题在于localStorage.setItem() 的性能。我现在试试indexedDB :-/

更新/解决方案

在我在 index.html 上添加数据后,由于某种原因它起作用了。可能是范围问题..

<script> 
  BigCollection.allItems = new BigCollection.AllItems();
  BigCollection.allItems.add( BigCollection.allItemsArray ); // Add all the data
</script>

【问题讨论】:

  • BigCollection.add(mightyArray); 呢?
  • 是的。是同步create() x 1200 导致速度变慢吗?您可能希望先创建集合,然后执行 BATCH save(),而不是尝试逐个保存每个模型。@nikoshr,为什么不只是 BigCollection.reset(arrayHash)?
  • @orangewarp 如果集合为空,则等效,但集合可能已经有模型,因此添加以确保安全。
  • 明白了。这就说得通了。 :-)
  • @nikoshr 我尝试了BigCollection.add(mightyArray) 变体,但我得到了一个没有模型的集合。

标签: javascript arrays backbone.js local-storage


【解决方案1】:

看起来您正在创建 1200 个请求。您最好自己提出将数据保存到服务器的请求,然后提出

BigCollection.add(mightyArray,{silent: true});

传递静默将避免所有对服务器的请求。

【讨论】:

  • 由于某种原因,这在控制台中有效,但如果我将其添加到我的 JS 文件中,则无效?
  • 对不起,我没看懂你的句子。能给个代码解释一下吗?
  • 当我在 Chrome 开发者工具控制台中使用 add 时,我可以使用 BigCollection 中的数据。当我在定义集合的 JS 文件中执行相同操作时,我得到一个长度为 0 的BigCollection。
猜你喜欢
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
相关资源
最近更新 更多