15

これについてどう思いますか。Webワーカーで同期リクエスト(XMLHttpRequest)を使用することをお勧めしますか?どのような問題を見つけることができますか?

私は自分のアプリでこれをテストしてきましたが、問題は見つかりませんでした。しかし、jQueryとAJAXの古い経験のため、この同期動作が怖いです。私のアプリはデータベース内のいくつかのテーブルから大量のデータを取得しますが、これには時間がかかります。テーブルから取得したデータの束ごとに、全体を遅らせすぎないように、すぐに処理する必要があります。その間、ユーザーはブラウザを操作しているので、ブラウザをブロックすることができ、Webワーカーは問題なく動作すると思いました。これが良い解決策だと思いますか?または、非同期リクエストを試してみる必要がありますか?

ありがとうございました。

4

2 に答える 2

20

確固たる事実はありませんが、あなたが意見を求めたので... :)

Chrome には重大な問題があります。Web ワーカーが多すぎると、サイレント クラッシュが発生する可能性があります (このバグ レポートによると、上限は 60 ~ 100です)。一般的な問題は、少なくとも v8 では、Web ワーカーがリソースを大量に消費することです。

Web Worker で同期 HTTP 呼び出しを行っている場合、最終的に複数の HTTP 呼び出しを行うことになると仮定します。

  • ある意味では、非同期 Web ワーカーの非同期 HTTP 呼び出しと引き換えに、別の仲介者をミックスに追加するだけであり、物事を非同期で管理する必要があります。
  • よりシンプルでリソース効率の高いルートを選択し、Web Worker を 1 つしか使用しない場合は、Web Worker からの応答を待つのに多くの時間を費やすことになります。
  • 一方、複数の Web ワーカーを使用する場合は、どれが空いているか、どれがビジーかなどを追跡する必要がある可能性があります。ブラウザに焼き付けました。
  • 最後に、Web Worker は (明らかに) 高価であり、複数の Web Worker を作成して、HTTP 呼び出しが終了するのを待つことができるようになる可能性があります。

私はこの問題の専門家だとは思っていません。

更新: さまざまなシナリオの長所と短所を追加します。

Web Worker を使用する際に、同期 HTTP 呼び出しと非同期 HTTP 呼び出しのどちらを行うかを選択する際に思い浮かぶいくつかの長所と短所:

  • 一般に、同期リクエストは書きやすく、従うのも簡単なコードになります。同期リクエストの欠点は、個別の小さな関数に分割する必要がある長い関数の記述を助長する可能性があることです。
  • 単一の呼び出しを行っている場合、2 つのメソッド間で完了するまでにかかる時間に違いはなく、少し単純であるため、同期の方が優れています。1 つのコールバック リスナーを使用した 1 つの非同期呼び出しは非常に単純であるため、少し単純であると言えます。
  • ユーザーのプロファイル データを読み込んで、住所に基づいて地域の天気を取得するなど、特定の順序で発生する必要がある複数の呼び出しを行う場合は、同期呼び出しの方が優れています。読んだ。それを読むことについての主なことは、呼び出しの順次的な依存関係が、呼び出しを同期的に行うという選択と関数内でのそれらの順序によって明確に概説されることです。コールが多ければ多いほど、これは重要になります。呼び出しが多い場合、複雑さの違いは劇的になる可能性があります。
  • 特定の順序で発生する必要のない複数の呼び出しを行う必要がある場合は、同期要求よりもプロセス全体が桁違いに高速になる可能性があるため、非同期要求の方が適しています。通話が多いほど、または接続が遅いほど、合計経過時間の差は大きくなります。この差は急速に拡大します (指数関数的に?)。コードを読んでいる人の観点からすると、この状況で同期リクエストを使用することは、やや呼び出しにはシーケンシャルな性質があることを示唆しているため、誤解を招く可能性があります。互いに依存しない一連の非同期リクエストを作成するという観点からは、カウンターをセットアップし、すべての呼び出しを行い、各コールバックでカウンターをインクリメントするだけなので、それほど悪くはありません。カウンターがあなたが行った呼び出しの数と等しいとき。

更新: @rbundrittは、この回答に対するコメントで非常に興味深い関連性のある観察を行っています。

私が Web ワーカーで作業していることに気付いたのは、それぞれが独自の http 制限を獲得しているように見えるということです。ブラウザは、スロットリングする前にブラウザに応じて同時 http リクエストの数を約 8 または 12 に制限します。これは、処理するリクエストが多数ある場合にボトルネックになる可能性があります。要求を Web ワーカーに渡すと、スロットリングを開始する前に、それぞれが 8 ~ 12 の同時要求を実行できることがわかりました。これは、一部のアプリにとって大きなメリットとなります。

@rbrandritt

于 2012-12-28T12:06:23.843 に答える