이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 11130|회답: 2

[JavaScript] ajax와 axios, fetch의 차이점

[링크 복사]
게시됨 2019. 5. 16. 오후 1:28:28 | | | |
1.jQuery ajax

전통적인 Ajax는 원래 js에 등장한 가장 초기의 백엔드 요청 기술인 XMLHttpRequest(XHR)를 의미하며, 코어는 XMLHttpRequest 객체를 사용합니다.

JQuery ajax는 네이티브 XHR을 캡슐화한 것으로, JSONP 지원을 추가합니다. 수년간의 업데이트와 유지보수 끝에 정말 매우 편리해졌고, 그 장점은 말할 필요도 없습니다; 몇 가지 단점만 나열하려 한다면, 아마도 다음과 같을 수 있습니다:

1. 이는 현재 프론트엔드 MVVM의 흐름에 부합하지 않는 MVC용 프로그래밍입니다
2. 네이티브 XHR 개발을 기반으로 하며, XHR 자체의 아키텍처는 명확하지 않습니다.
3. JQuery 전체 프로젝트가 너무 방대하며, 개인화된 패키징 솔루션을 채택하고 CDN 서비스를 즐기지 않는 것만으로 JQuery를 전부 도입하는 것은 매우 비합리적입니다
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용 약속을 기반으로 한 HTTP 클라이언트로, 본질적으로 네이티브 XHR의 캡슐화이지만, 최신 ES 사양을 준수하는 약속 구현체이며, 다음과 같은 특징을 가지고 있습니다:

1. 브라우저에서 XMLHttpRequest 생성
2. 약속 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. 초점 분리를 준수하며, 한 객체에서 이벤트로 추적되는 입력, 출력, 상태를 혼합하지 않습니다.
2. 더 나은, 더 편리한 글쓰기 방법
솔직히 위 이유들은 저에게 전혀 설득력이 없어요. Jquery와 Axios가 xhr을 잘 캡슐화하는 데 도움을 주었고 사용하기 쉬운데, 왜 여전히 fetch를 배우는 데 많은 노력을 들여야 하는지도 모르겠어요.

제가 생각하기에 fetch의 주요 장점은 다음과 같습니다:


1. 문법이 간결하고 의미론적입니다
2. 표준 약속 구현을 기반으로 하며, 비동기/대기 지원
3. [isomorphic-fetch](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는 중단을 지원하지 않고, 타임아웃 제어를 지원하지 않으며, setTimeout과 Promise.reject가 구현한 타임아웃 제어는 요청 프로세스가 백그라운드에서 계속 실행되는 것을 막을 수 없어 트래픽이 낭비됩니다
4) fetch는 요청의 진행 상황을 네이티브로 모니터링할 방법이 없지만, XHR은 가능합니다
요약: Axios는 fetch 문제 없이 동시 캡슐화를 제공하며, 크기도 작아 현재 가장 적합한 요청 방식입니다.




이전의:Pure CSS3가 라디오 버튼을 아름답게 다룹니다
다음:BIO와 NIO에 대한 이해
게시됨 2019. 5. 17. 오후 6:16:39 |
배웠다,
 집주인| 게시됨 2025. 2. 20. 오전 10:08:01 |
네이티브 XMLHttpRequest 요청

가져오기






올리기



면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com