Javascript 如何处理大量AJAX请求(>;1000)

Javascript 如何处理大量AJAX请求(>;1000),javascript,jquery,ajax,backbone.js,express,Javascript,Jquery,Ajax,Backbone.js,Express,我的应用程序正在从客户端的谷歌联系人API获取用户的所有谷歌联系人。这通常会产生1-2000个不同的JSON对象。收到这些信息后,我的应用程序会对它们进行迭代,重新格式化每个联系人对象,然后尝试通过POST请求将重新格式化的联系人对象保存到我的数据库中。其结果是大量(1-2000)的AJAX调用在客户端启动,但在5-10次调用之后就停止了。处理所有这些AJAX请求或一次性保存如此大量的数据的最佳方法是什么 以下是我当前代码的摘要版本: // gContacts.length = 722 $(g

我的应用程序正在从客户端的谷歌联系人API获取用户的所有谷歌联系人。这通常会产生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()

我将执行一个服务器端操作,该操作将获取联系人对象的整个列表。然后在客户端,只需格式化它们并将它们全部添加到一个数组中,完成后发送该数组。这样做会产生大量不必要的网络开销。

我会在服务器端执行一个操作,该操作会获取一整列联系人对象。然后在客户端,只需格式化它们并将它们全部添加到一个数组中,完成后发送该数组。您这样做会产生大量不必要的网络开销。

大多数现代浏览器将同时请求限制为。在一个活动请求完成之前被阻止的请求,为队列中的下一个请求释放连接。如果活动请求花费足够长的时间(读“太长”),未决请求将超时,如您所见

要正确处理此问题,您确实需要使用自己的请求管理代码。一次只能发出浏览器能够处理的请求数。当请求完成、出错或超时时,发出下一个请求。这需要维护一个挂起的请求队列,并准确地检测请求何时完成或何时完成,但应该做到这一点

您可能遇到的一个问题是,您的POST请求将与对服务器的所有其他请求竞争。例如,您可能注意到,如果在这些帖子请求通过网络发送时打开网站的另一个页面,您的网站永远不会加载,或者加载速度非常慢


正如其他人所说,将这些更新批处理到单个请求中可能是更好的解决方案。

大多数现代浏览器将同时请求限制为。在一个活动请求完成之前被阻止的请求,为队列中的下一个请求释放连接。如果活动请求花费足够长的时间(读“太长”),未决请求将超时,如您所见

要正确处理此问题,您确实需要使用自己的请求管理代码。一次只能发出浏览器能够处理的请求数。当请求完成、出错或超时时,发出下一个请求。这需要维护一个挂起的请求队列,并准确地检测请求何时完成或何时完成,但应该做到这一点

您可能遇到的一个问题是,您的POST请求将与对服务器的所有其他请求竞争。例如,您可能注意到,如果在这些帖子请求通过网络发送时打开网站的另一个页面,您的网站永远不会加载,或者加载速度非常慢


正如其他人所说,将这些更新批处理到单个请求中可能是更好的解决方案。

是否需要在客户端完成?似乎它更适合服务器。为什么不执行一个包含所有数据的请求呢?不要拨打1000多个电话-这样会浪费网络资源,而且速度很慢。将整个列表处理成一个JSON数组,并立即发布整个列表。看起来应该像zerkms所说的那样在一个请求中完成。创建和破坏连接的开销会让你丧命。为什么你要迭代所有700个联系人,并为每个联系人创建一个新联系人?为什么不在一个请求中一次创建所有700个呢?这需要在客户端完成吗?似乎它更适合服务器。为什么不执行一个包含所有数据的请求呢?不要拨打1000多个电话-这样会浪费网络资源,而且速度很慢。将整个列表处理成一个JSON数组,并立即发布整个列表。看起来应该像zerkms所说的那样在一个请求中完成。创建和破坏连接的开销会让你丧命。为什么你要迭代所有700个联系人,并为每个联系人创建一个新联系人?为什么不在一个请求中一次性创建所有700个?