1

私のアプリは、クライアント側の Google Contacts 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()
4

2 に答える 2

7

連絡先オブジェクトの全リストを取得するサーバー側のアクションを作成します。次に、クライアント側で、それらをフォーマットしてすべて配列に追加し、それが完了したら配列を送信します。この方法では、多くの不必要なネットワーク オーバーヘッドが発生します。

于 2013-11-07T22:14:48.107 に答える
3

最新のブラウザのほとんどは、同時リクエストをドメインごとに 6 つに制限しています。アクティブなリクエストの 1 つが完了するまでブロックされ、キュー内の次のリクエストのために接続が解放されます。アクティブなリクエストに十分な時間がかかる場合 (読み取り、「長すぎる」)、保留中のリクエストは、ご覧のようにタイムアウトします。

これを適切に処理するには、独自のリクエスト管理コードを作成する必要があります。ブラウザーが処理できる数の要求のみを一度に発行します。リクエストが完了するか、エラーが発生するか、タイムアウトになると、次のリクエストを発行します。これには、保留中のリクエストのキューを維持し、リクエストがいつ完了または終了するかを正確に検出する必要がありますが、うまくいくはずです。

遭遇する可能性のある問題の 1 つは、POST リクエストがサーバーへの他のすべてのリクエストと競合することです。たとえば、これらの POST リクエストがネットワーク上を移動しているときに Web サイトの別のページを開くと、Web サイトがまったく読み込まれないか、読み込みが非常に遅くなることに気付いている場合と気付いていない場合があります。

他の人が言ったように、これらの更新を単一のリクエストにまとめることは、おそらくより良い解決策です。

于 2013-11-07T22:17:12.643 に答える