この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 11130|答える: 2

[JavaScript] AjaxとAxios、そしてfetchの違い

[リンクをコピー]
掲載地 2019/05/16 13:28:28 | | | |
1.jQuery ajax

従来のAjaxは、オリジナルのjsに登場した最も古いバックエンドリクエスト技術であるXMLHttpRequest(XHR)を指し、コアはXMLHttpRequestオブジェクトを使用しています。

JQuery ajaxはネイティブXHRのカプセル化であり、JSONPのサポートも追加しています。 長年のアップデートとメンテナンスを経て、本当に非常に便利で、その利点は言うまでもありません。 もしいくつかの欠点を挙げるなら、それは以下だけかもしれません:

1. これはMVC向けのプログラミングであり、現在のフロントエンドMVVMの波に適合していません
2. ネイティブのXHR開発に基づくと、XHR自体のアーキテクチャは明確ではありません。
3. JQueryプロジェクト全体が大きすぎて、AJAXだけでJQuery全体を導入するのは非常に不合理です(パーソナライズされたパッケージソリューションを採用し、CDNサービスを享受しない)
4. 関心事の分離の原則に適合しない
5. 構成と呼び出しが非常に混乱し、イベントベースの非同期モデルは友好的ではありません。

PS:MVVM(Model-View-ViewModel), 源自于经典的 Model–View–Controller(MVC)模式。MVVM 的出现促进了 GUI 前端开发与后端业务逻辑的分离,极大地提高了前端开发效率。MVVM 的核心是 ViewModel 层,它就像是一个中转站(value converter),负责转换 Model 中的数据对象来让数据变得更容易管理和使用,该层向上与视图层进行双向数据绑定,向下与 Model 层通过接口请求进行数据交互,起呈上启下作用。View 层展现的不是 Model 层的数据,而是 ViewModel 的数据,由 ViewModel 负责与 Model 层交互,这就完全解耦了 View 层和 Model 层,这个解耦是至关重要的,它是前后端分离方案实施的最重要一环。

以下の図に示されています:




2.axios

Vue2.0の後、ユーユーシーはJQuery ajaxをaxiosに置き換えることを勧めました。これにより多くの人の目にaxiosが入ったに違いありません。

axiosはブラウザおよびnodejs向けのPromisesに基づくHTTPクライアントであり、基本的にはネイティブXHRのカプセル化ですが、最新のES仕様に準拠したPromiseの実装であり、以下の特徴を持っています。

1. ブラウザからXMLHttpRequestを作成する
2. Promise APIのサポート
3. クライアントサポートがCSRFを阻止する
4. 並行リクエストのためのインターフェースを提供する(重要で、はるかに便利な操作)
5. node.jsからのHTTPリクエストを作成する
6. 傍受リクエストと応答
7. 変換要求および応答データの変換
8. 申請の取り消し
9. JSONデータの自動変換

PS:防止CSRF:就是让你的每个请求都带一个从cookie中拿到的key, 根据浏览器同源策略,假冒的网站是拿不到你cookie中得key的,这样,后台就可以轻松辨别出这个请求是否是用户在假冒网站上的误导输入,从而采取正确的策略。

3. 取ってこい


Fetchは、ES6に登場し、ES6で約束オブジェクトを使用しているAJAXの代替として宣伝されています。 Fetchは約束に基づいて設計されています。 Fetchのコード構造はajaxよりもずっとシンプルで、パラメータもjQuery ajaxに少し似ています。 ただし、忘れないでくださいfetchはAJAXのさらなるカプセル化ではなく、ネイティブのjsであり、XMLHttpRequestオブジェクトを使用しません

取ってこいくことの利点:

1. 焦点分離を遵守し、1つのオブジェクト内で入力、出力、イベントで追跡される状態を混同しない
2. より良く便利な書き方
正直なところ、上記の理由は私には全く納得できません。JqueryもAxiosもxhrを十分にカプセル化するのに役立ち、使いやすいのに、なぜまだフェッチを学ぶのに多くの労力を費やさなければならないのでしょうか?

Fetchの主な利点は以下の通りだと思います:


1. 構文は簡潔で意味的です
2. 標準的な約束実装に基づく、非同期/awaitのサポート
3. 同型的利便性([同型取り](https://github.com/matthew-andrews/isomorphic-fetch)
4. よりボトムレベルで、リッチなAPI(リクエスト、レスポンス)を提供します
5. XHRからの分離はES仕様における新しい実装です
最近、fetchを使っているときに多くの問題に直面しました:
fetchはネイティブのXHRと考えられる低レベルのAPIなので、使いやすさはあまり良くなく、カプセル化が必要です。
例えば:


1) fetchはネットワークリクエストのみのエラーを報告し、400および500リクエストを成功したリクエストとして扱い、400または500のエラーコードを返してもサーバーは拒否しません。
2) fetchはデフォルトでクッキーを含まず、設定項目を追加する必要があります:fetch(URL, {credentials: 'include'})
3) fetchはabortをサポートしず、タイムアウト制御もサポートせず、setTimeoutとPromise.rejectによって実装されたタイムアウト制御は、リクエストプロセスがバックグラウンドで実行を続けることを阻止できず、トラフィックの無駄が生じます
4) fetchはリクエストの進行状況をネイティブに監視できませんが、XHRは可能です
まとめ:Axiosはフェッチの問題がなく並行カプセル化を提供し、サイズも小さいため、現在最も適したリクエスト方式となっています。




先の:Pure CSS3はラジオボタンを美しく化します
次に:BIOとNIOの理解
掲載地 2019/05/17 18:16:39 |
学んだ、
 地主| 掲載地 2025/02/20 10:08:01 |
ネイティブXMLHttpリクエスト

取得






投稿



免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com