【发布时间】:2013-11-19 19:01:43
【问题描述】:
我的应用正在客户端从 Google 联系人 API 获取用户的所有 Google 联系人。这通常会产生 1 - 2000 个不同的 JSON 对象。收到这些后,我的应用程序会遍历它们,重新格式化每个联系人对象,然后尝试通过 POST 请求将重新格式化的联系人对象保存到我的数据库中。这样做的结果是在客户端触发了大量(1 - 2000)个 AJAX 调用,但在 5-10 个之后它们就停止了。处理所有这些 AJAX 请求或一次保存如此大量数据的最佳方法是什么?
这是我当前代码的摘要版本:
// gContacts.length = 722
$(gContacts).each(function(index, contact) {
// Reformat each contact object to fit into my database
var newContact = {}
newContact.title = // String
newContact.emails = // Object featuring different emails
newContact.phone_numbers = // Object featuring different phonenumbers
// Save to Database via Backbone
var newContact = new App.Collections.Contacts()
newContact.create({
title : newContact.title,
emails : newContact.emails,
phone_numbers : newContact.phone_numbers
}, {
success: function (response) {
},
error: function (model, xhr) {
var errors = $.parseJSON(xhr.responseText).errors
console.log(errors)
}
}) // End .save
}); // End of .each()
【问题讨论】:
-
这需要在客户端完成吗?似乎它更适合服务器。
-
为什么不执行一个包含所有数据的请求?
-
不要拨打 1000+ 电话 - 这会浪费网络资源并且速度很慢。将整个列表处理成一个 JSON 数组并一次性发布整个列表。
-
似乎应该像zerkms所说的那样在单个请求中进行。创建和销毁连接的开销会让您感到沮丧。
-
为什么要遍历所有 700 个联系人并为每个联系人创建一个新联系人?为什么不在一个请求中一次创建所有 700 个?
标签: javascript jquery ajax backbone.js express