この記事では主に JavaScript におけるシングルスレッドの非同期 IO コールバックの特性を分析します。私たちがまとめた内容がお役に立てば幸いです。
私たちが JavaScript に初めて触れたときのほとんどは HTML の js スクリプトから始まりましたが、私たちはこの一見単純な言語をその原理やメカニズムの一部を理解せずに数年間使用してきました。何か間違いはありませんか?
少なくとも JavaScript はさまざまなイベントを使用します。ボタン、リンクのクリック、マウスの通過、フォーカスの取得など、dom を操作するときのコールバック。
このプロセスでは、onclick= "doCheck()" などのイベント コールバック関数を dom にバインドします。このプロセスは、 dom 要素のクリック イベントを作成し、イベント コールバック関数 doCheck() をバインドします。
マウスがこの要素をクリックすると、イベントがトリガーされ、イベント バインディング関数がすぐに実行され、
後で私が入ったときに戻ります。 jquery にアクセスすると、たくさんの
$("#id").click(function(){ alert('点击事件'); });
jquery 構文が書かれ、それに慣れてきたように見えましたが、前のセレクターは dom ノードを選択してフィルターするだけであることに気付きました。次のクリックはイベントの登録です。内部の function(){} は実際にはパラメータであり、イベント バインディング関数のパラメータです。
function は JavaScript のオブジェクトであり、世界中のあらゆるものを参照できます。 、したがって、オブジェクトには多くの属性、メソッドなどを含めることができます
それはオブジェクトであるため、パラメーターとして渡すことができます。この種の関数は高階関数と呼ばれます
そして、この種の関数には定義がありません。 name もちろん名前を付けることもできますし、その名前を渡しても同じことですが、ここでの関数オブジェクトは実際には仮パラメータであるため、この種類を与えないことに慣れています。これはよく言われる匿名関数です。
上記の $("#id").click に続いて、click イベントがトリガーされると、イベント バインディング関数が実行される必要があります。上記の dom で直接指定された onclick メソッド
スクリプトを操作するためにブラウザーに複数のスレッドがあると仮定します。スレッド 1 が要素 A の値を変更しようとしていたのに、予期せずスレッド 2 がすでに削除されていたという混乱を想像できますか? dom ツリーの要素 A のノードでは、この時点で 1 つのスレッドが動作に失敗し、エラーが報告されます。この状況は、ブラウザまたはフロントエンドのいずれかで問題が発生するわけではありません。エンジニアが自分でメンテナンスしているので... dom を操作するブラウザー スレッドは 1 つだけなので、多くの不必要なトラブルが省けます
setTimeout(function(){ alert('弹出'); },300); while(true){ ........ }
300 ミリ秒後にアラート ('ポップアップ') が発生する可能性はまだあると思いますか。 ?
いいえ、300 ミリ秒待つのは、ただの感情的なものです。
スレッドが無限ループ モードになると、 , setTimeout はもう何の効果もありません
そして、node.js の世界に入りました。これは、ブラウザーの JavaScript の特性、シングルスレッドの非同期コールバックを完全に保持しています。これはまさにこの機能のおかげです。つまり、node.js が同期言語であれば、npm パッケージをすべて C++ で拡張しても (速度は十分ですよ) いくら速くても C 言語の処理速度には勝てませんよね。 ? では、node.js は誕生する前から PHP に軽蔑されていたのかもしれません
非同期コールバック IO があるからこそ、効率が良くなり、学生時代のファーストフード店の比較を思い出しました。そして学校の食堂:
食堂では、生徒全員が皿を持って窓際に一列に並び、食事を準備していたお姉さんが一人ずつご飯を盛り、ご飯を一つずつ持って帰っていきました。 .これは同期の結果です
学校のファーストフードレストランでも、注文するために列に並ぶ学生がいますが、注文後はポケベルを持って席を探すことができます。このようにして、ウェイターは多くの人にサービスを提供できます。単位時間内に、そして注文します。 おいしい食事を食べた生徒は、窓辺に立って食事を待つのではなく、自分で席を見つけて他のことをすることができます。食事が出てきた瞬間に、サーバーがコードを押します。注文番号に従って、テーブル上のポケベルが呼び出し音を鳴らしたら、食事を取りに行くだけです。これは非同期処理です。
単一スレッドでリソースの無駄を削減できます。もちろん、マルチコアとマルチスレッドのシナリオをサポートするために、専用のサードパーティ パッケージもあります。
上記は、すべての人のためにまとめたものです。今後皆さんのお役に立てば幸いです。
関連記事:
react-navigation のナビゲーション使用法の詳細な解釈
JavaScript での Function 関数の詳細な解釈 (詳細なチュートリアル)
AngularJS2 と D3.js の統合を使用してカスタム視覚化を実現する方法
以上がJS を使用してシングルスレッドの非同期 IO コールバックを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。