ホームページ  >  記事  >  ウェブフロントエンド  >  ajaxの同期と非同期とは何ですか

ajaxの同期と非同期とは何ですか

WBOY
WBOYオリジナル
2022-07-04 15:57:543503ブラウズ

ajax 同期とは、JavaScript コードが現在の ajax に読み込まれると、ページ内のすべてのコードの読み込みが停止し、ページが一時停止アニメーションの状態になることを意味します。ajax が実行されると、ページはコードは実行を継続します。ajax 非同期とは、現在の ajax コードの実行中に他のコードも実行できることを意味します。

ajaxの同期と非同期とは何ですか

#この記事の動作環境: Windows10 システム、javascript1.8.5&&html5 バージョン、Dell G3 コンピューター。

ajax 同期と非同期とは

(1) 同期とは、JS コードが現在の AJAX にロードされると、ページ内のすべてのコードの読み込みが停止し、ページがAJAX が実行されると、ページの一時停止状態が解除され、コードは引き続き実行されます。

(2) 非同期とは、現在の AJAX コードの実行中に他のコードを実行できることを意味します。

jquery の async:false、この属性

デフォルトは true: 非同期、false: 同期です。

例は次のとおりです。

$.ajax({
           url: prefix + "/exportById",
           data: {ids:ids},
           type: 'POST',
           traditional: true,
           cache:false, 
           async:false, 
           success: function (result) {
            if (result.code == web_status.SUCCESS) {
                  window.location.href = ctx + "common/download?fileName=" + result.msg + "&delete=" + true;
                } else {
                             alert("导出失败");
                    }
                }
        });

拡張知識

AJAX は同期リクエストをどのように実装しますか?

Ajax リクエストは同期リクエストと非同期リクエストに分けられますが、デフォルトでは非同期リクエストになっています。次の記事では、ajax 同期リクエストの実装について紹介しますので、困っている方は参考にしていただければ幸いです。

まず、同期は単一スレッドであり、コードは順番に実行されることを知っておく必要があります。js コードが現在の同期 ajax リクエストにロードされると、ページ上の他のすべてのコードのロードが停止します。ページは一時停止アニメーションの状態にあり、リクエストが完了するまで、他のリクエストが実行されます。

第二に、ajax は、async の値に応じて、同期と非同期の 2 つのリクエスト メソッドに分けられることを知っておく必要があります。async の値が true の場合、それは非同期リクエスト メソッドです。 async の値が false の場合、それは非同期リクエスト メソッドです。同期リクエスト メソッドなので、ajax 同期リクエストを実装するには、async の値を false に設定するだけです。

$.ajax(
  
      type:“POST”/“GET”
  
      url:"",
  
      data:{},
  
      dataType:"json",
  
      async:false,  //同步
  
     success:function(response){
  
           }     
  
   );

Ajax の同期リクエストと非同期リクエストの違いは何ですか?また、使用シナリオは何ですか?

理解 1:

AJAX は、次の値に応じて、同期 (async = false) と非同期 (async = true) の 2 つの実行方法に分けられます。 async. ; W3C チュートリアルでは、非同期実行を使用することが推奨されています;

同期と非同期実行の違いを区別しましょう:

非同期: 非同期モードでは、AJAX を使用して送信する場合リクエストには、実行する必要のあるコードがまだある可能性があります。現時点では、さまざまな理由によりサーバーがリクエストに応答していない可能性がありますが、非同期実行を使用しているため、AJAX リクエスト コードを含むすべての関数の残りのコードは引き続き実行されます。リクエストの結果を別の JS 関数に渡して処理すると、2 つのスレッドが同時に実行されているような状態になります。

同期: 同期モードでは、AJAX を使用してリクエストを送信した後も、実行する必要のあるコードがまだあります。また、サーバーの応答を処理のために別の JS 関数に渡しますが、コードの実行は今回は Yes: サーバーが応答しない場合、または応答結果を処理する JS 関数がリターン処理を行っていない場合、リクエスト コードを含む関数の残りのコードは実行できません。単一スレッドと同様に、リクエストが送信された後にブロック状態に入り、残りのコードはブロック状態になるまで実行を継続しません。

同期モードまたは非同期モードを選択するにはどうすればよいですか?この質問に答えるには、次の考えられる質問を通じて答えることができます:

AJAX リクエストを送信した後も、サーバーの応答結果の処理を続ける必要があります。非同期リクエスト モードを使用し、結果の処理は別の JS 関数によって処理されます。このとき、非同期リクエストに対する応答がまだ到着しておらず、関数が return ステートメントの実行を終了しているため、戻り結果が空の文字列になるという状況が発生する可能性があります。

理解 2:

同期: リクエストを送信し、戻りを待ってから次のリクエストを送信します。

非同期: リクエストを送信し、待たずに戻ってください。いつでも次のリクエストを送信できます。

同期により、デッドロックやダーティ データの読み取りを回避できます。通常、特定のリソースを共有するときに使用されます。全員が変更権限を持っていて、ファイルを変更する場合同時に、ある人が削除したコンテンツを他の人が読むことができ、エラーが発生し、同期が順番に変更されます。

非同期により効率が向上します。最近の CPU はデュアルコアまたはクアッドコアです。非同期処理すると、複数のタスクを同時に実行できます。もちろん、同時に処理できることを確認する必要があります。 。

同期と非同期の最大の違いは次のとおりです。一方は待つ必要がありますが、もう一方は待つ必要はありません。

たとえば、テキスト メッセージの送信は非同期の例です。開始側は受信側のステータスを気にしません。受信機からの返信情報を待つ必要がなく、次の送信を行うことができます。

電話は同期の一例です。発信者は受信者を待つ必要があり、通話が接続されるまで通信は開始されません。受信者からの返信情報を待つ必要があります

私たちがよく議論する同期の問題は、主にマルチスレッド環境でのデータ共有の問題で発生します。つまり、複数のスレッドが同じリソースにアクセスする必要がある場合、特定の瞬間に 1 つのスレッドだけがリソースにアクセスできるようにするために、スレッドを特定の順序で配置する必要があります。非同期が使用される場合、プログラムの実行結果は次のようになります。予測不能になる。したがって、この場合はデータを同期する必要があります。つまり、1 つのプロセスのみがリソースにアクセスでき、他のスレッドは待機する必要があります。

同期を実現するメカニズムには、主にクリティカル セクション、ミューテックス、セマフォ、イベントが含まれます

クリティカル セクション: パブリック リソースにアクセスするか、高速で適切なコード部分データアクセスを制御します。共有リソースにアクセスできるスレッドは常に 1 つだけです。複数のスレッドがパブリック リソースにアクセスしようとすると、1 つのスレッドが入った後、パブリック リソースにアクセスしようとしている他のスレッドは一時停止され、クリティカル セクションに入るまで待機します。スレッドが終了した後は、クリティカル セクションが解放されると、他のスレッドがそれをプリエンプトできます。

Mutex: 相互排他的なオブジェクト機構を採用します。相互に排他的なオブジェクトを所有するスレッドのみが、パブリック リソースにアクセスする権限を持ちます。相互に排他的なオブジェクトは 1 つだけであるため、パブリック リソースが複数のスレッドによって同時にアクセスされないことが保証されます。 Mutex は、同じアプリケーションのパブリック リソースの安全な共有を実現するだけでなく、異なるアプリケーションのパブリック リソースの安全な共有も実現でき、クリティカル セクションよりも複雑です。なぜなら、相互排他を使用すると、同じアプリケーションの異なるスレッド間でリソースを安全に共有できるだけでなく、異なるアプリケーションのスレッド間でもリソースを安全に共有できるからです。

セマフォ: 複数のスレッドが同じリソースに同時にアクセスできるようにしますが、このリソースに同時にアクセスできるスレッドの最大数を制限する必要があります。セマフォ オブジェクトがスレッドを同期する方法はこれまでの方法とは異なり、シグナルにより複数のスレッドが共有リソースを同時に使用できるようになり、これはオペレーティング システムの PV 操作と同じです。共有リソースに同時にアクセスできるスレッドの最大数を示します。複数のスレッドが同じリソースに同時にアクセスできますが、このリソースに同時にアクセスできるスレッドの最大数を制限する必要があります。

イベント: 通知操作を通じてスレッドの同期を維持し、複数のスレッドの優先順位の比較も容易にします。

[関連チュートリアルの推奨事項: AJAX ビデオ チュートリアル]

以上がajaxの同期と非同期とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。