-1

私はノンブロッキングアーキテクチャに魅了されています。Node.jsは使用していませんが、概念的には把握しています。また、私はイベント駆動型Webアプリを開発しているので、イベントプログラミングの基本を理解しています。

ブラウザでノンブロッキングJavaScriptをどのように記述しますか?これは、Nodeのやり方とはいくつかの点で異なっているに違いないと思います。たとえば、私のアプリでは、ユーザーが大量のデータをロードできます(JSONにシリアル化されています)。このデータは、アプリケーションの状態を再構成するために解析されます。これは重い操作であり、ブラウザが一時的にロックされる可能性があります。

Webワーカーを使用することは1つの方法だと思います。(これは当然の選択のように見えましたが、NodeはWebワーカーを使用せずに、非ブロッキングのイベント駆動型アーキテクチャを実現しているので、別の方法があるはずです。)タイマーも役割を果たすことができると思います。TameJSとjavascript言語を拡張する他のいくつかのライブラリについて読みました。新しい言語構文を導入せずにネイティブJavaScriptを使用するJavaScriptライブラリに興味があります。

リソース、ライブラリ、および実用的な例へのリンクが最も高く評価されています。

編集:

詳細を学び、私が話していることは「未来」という用語に該当することに気づきました。jQueryはこれを実装しますが、常にXHRを使用してサーバーを呼び出し、サーバーが結果を返す前に処理を実行します。その後、サーバーを呼び出さずに同じことを実行します。クライアントは処理を実行しますが、非ブロッキングです。マナー。

http://www.erichynds.com/jquery/using-deferreds-in-jquery/

4

2 に答える 2

2

3つは、ブラウザでノンブロッキング作業を行う2つの方法です。

  • Webワーカー。WebWorkersは、計算を行うための新しい分離スレッドを作成しますが、ブラウザーのサポートにより、IE<10はユーザーを嫌っています。
  • それを行わない場合は、クライアントでブロック方式の高価な作業を行わないでください。これを行うためにajaxリクエストをサーバーに送信してから、サーバーに結果を返してもらいます。

貧乏人のスレッド:

使用できるハックがいくつかあります。

  • を使用してタイムスプライシングをエミュレートしsetTimeoutます。これは基本的に、作業の「塊」が発生するたびに、を呼び出すことでブラウザに応答する余地を与えることを意味しますsetTimeout(doMore, 10)。これは基本的に、最適化されていない非常に貧弱な方法で独自のプロセススケジューラを記述しています。代わりに、Webワーカーを使用してください。
  • 独自のhtmlドキュメントを使用してiframeを作成することにより、「新しいプロセス」を作成します。このiframeでは、独自のhtmlドキュメントの応答をブロックすることなく計算を実行できます。
于 2011-10-12T14:12:51.377 に答える
0

特にノンブロッキングとはどういう意味ですか?

最も長い操作であるAjax-callsは、すでに非ブロッキング(非同期)です

「どこか」で実行してから何かを実行するために実行時間の長い関数が必要な場合は、

 setTimeout(function, 0)

関数からコールバックを呼び出します。

そして、あなたはまた、約束ここでも読むことができます

于 2011-10-11T17:25:13.270 に答える