XMLHttpRequest, jQuery.ajax, jQuery.post, jQuery.get의 차이점은 무엇입니까?


121

상황에 가장 적합한 방법을 어떻게 찾을 수 있습니까? 누구든지 기능과 성능의 차이를 알 수있는 몇 가지 예를 제공 할 수 있습니까?


4
성능과 관련하여 (거의 대답하지 않음) : jsperf 에 따르면 일반 XMLHttpRequest를 사용하는 것이 jQuery를 사용하는 것보다 훨씬 빠릅니다.
e2-e4

답변:


145
  • XMLHttpRequest jQuery가보다 유용하고 단순화 된 양식과 브라우저 간 일관된 기능으로 래핑하는 원시 브라우저 개체입니다.

  • jQuery.ajax 모든 유형 및 콘텐츠 요청을 수행 할 수있는 jQuery의 일반 Ajax 요청자입니다.

  • jQuery.get그리고 jQuery.post다른 한편으로는 단지 GET 및 POST 요청을 발행 할 수 있습니다. 이것이 무엇인지 모른다면 HTTP 프로토콜을 확인 하고 조금 배워야합니다. 내부적으로이 두 함수는 사용 jQuery.ajax하지만 직접 설정할 필요가없는 특정 설정을 사용하므로 .NET을 사용하는 것에 비해 GET 또는 POST 요청을 단순화 jQuery.ajax합니다. GET 및 POST는 어쨌든 가장 많이 사용되는 HTTP 메서드입니다 (DELETE, PUT, HEAD 또는 다른 드물게 사용되는 외래종과 비교할 때).

모든 jQuery 함수 XMLHttpRequest는 백그라운드에서 객체를 사용 하지만 사용자가 직접 수행 할 필요가없는 추가 기능을 제공합니다.

용법

따라서 jQuery를 사용하는 경우 jQuery 기능 사용하는 것이 좋습니다 . XMLHttpRequest완전히 잊어라 . 적절한 jQuery 요청 함수 변형을 사용하고 다른 모든 경우에는 $.ajax(). 따라서 , 및에 대한 다른 일반적인 jQuery Ajax 관련 함수가 있음 을 잊지 마십시오 . 모든 요청에 사용할 수 있지만 호출하려면 더 많은 옵션이 필요하기 때문에 코드를 조금 더 작성해야합니다.$.get()$.post()$.ajax()$.ajax()

유추

마치 스티어링, 브레이크 등으로 자동차 전체를 만들어야하는 자동차 엔진을 직접 구입할 수있는 것과 같습니다. 자동차 제조업체는 친숙한 인터페이스 (페달, 스티어링 휠 등)를 사용하여 완성 된 자동차를 생산합니다. 그래서 당신이 모든 것을 스스로 할 필요가 없습니다.


성능 측면에서 $ .ajax ()를 사용하면 어떤 이점이 있습니까?
Rodrigues

1
@Rodrigues : 그렇지 않습니다. 당신이 생각 $.post하고 $.get더 느린 유일한 것은 $.ajax호출 되기 전에 적은 양의 코드 입니다. 그러나 XHR을 사용하여 직접 루틴을 작성한다면 약간 최적화 될 수 있지만 버그가 더 많을 수 있습니다. jQuery쪽에 머무르는 것이 좋습니다. 그것은 당신의 삶을 더 쉽게 만들 것입니다. 그리고 비동기 호출이 코드를 발행하는 것보다 훨씬 오래 걸린다는 사실을 고려하면 이러한 호출 사이에 명백한 차이가 없음을 알 수 있습니다.
Robert Koritnik 2011 년

감사합니다 Robert Koritnik. 그래서 나는 $ .post와 $ .get을 얻을 것입니다.
Rodrigues

$.ajax원하는 경우 어디에서나 일관된 통화 를 할 수 있습니다. XHR을 직접 사용하지 않는 한 어느 쪽이든 사용하는 것이 좋습니다.
Robert Koritnik 2011 년

1
@RobertKoritnik IE의 캐싱 문제는 어떻습니까? XMLHttpRequest 및 $ .ajax ()를 사용하면 동일합니까?
Bhargavi Gunda 2013-06-26

28

각각은 XMLHttpRequest를 사용합니다. 이것이 브라우저가 요청을 만드는 데 사용하는 것입니다. jQuery는 JavaScript 라이브러리 일 뿐이며 $ .ajax 메서드는 XMLHttpRequest를 만드는 데 사용됩니다.

$ .post$ .get$.ajax. 그들은 거의 같은 일을하지만 AJAX 요청을 더 빠르게 작성합니다 $.post. HTTP POST 요청을 $.get만들고 HTTP GET 요청을합니다.


업로드 및 다운로드를위한 각 기능의 데이터 전송 제한은 어떻
Rodrigues

GET클라이언트 / 서버 (에 의해 제한 될 수있다 - 요청 URL 문자열에있는 모든 데이터를 보내드립니다 stackoverflow.com/questions/2659952/...을 ). POST의 URL 크기 제한은 문제가되지 않습니다 그래서 요청, 헤더에있는 모든 데이터를 전송 (당신이하지 않으면 정말 긴 파일과 스크립트에 폴더 이름을!).
Jonathon Bolster 2011 년

확인. 즉, 더 많은 데이터 사용 게시물을 보내고 더 많은 데이터 사용을 받으려면 가져옵니다.
Rodrigues

@Rodrigues-Yup, 거의 :) 일반적으로 무언가를 읽고 자하는 경우 (예 : 트위터에서 트윗 목록을 요청하는 경우)을 사용하십시오 GET. 무언가를 보내려면 (예 : 트윗 게시) 다음을 사용하십시오 POST.
Jonathon Bolster 2011 년

7

jQuery.get에 대한 래퍼입니다 jQuery.ajaxXMLHttpRequest의에 대한 래퍼입니다.

XMLHttpRequest 및 Fetch API (현재 실험 중)는 DOM에서 유일하므로 가장 빠릅니다.

더 이상 정확하지 않은 정보를 많이 봤기 때문에 누구나 언제든지 가장 좋은 버전에서 테스트 할 수있는 테스트 페이지를 만들었습니다.

https://jsperf.com/xhr-vs-jquery-ajax-vs-get-vs-fetch

오늘 내 테스트에서 jQuery만이 깨끗하거나 빠른 솔루션이 아니라는 것을 보여줍니다. 모바일 또는 데스크톱에서 저에게 결과에 따르면 ajax를 너무 많이 사용하는 경우 jQuery가 XHR2보다 적어도 80 % 느립니다. 모바일에서는 간단한 사이트를로드하는 데 많은 시간이 걸립니다.

사용법 자체도 링크에 있습니다.


2

jQuery.post 및 jQuery.get은 일반적인 페이지로드를 시뮬레이션합니다. 즉, 제출 버튼을 클릭하면 새 페이지로 이동합니다 (또는 동일한 페이지를 다시로드합니다). post and get은 데이터가 서버로 전송되는 방식이 약간 다릅니다 ( 여기 에서 좋은 기사를 찾을 수 있습니다 .

jQuery.ajax 및 XMLHttpRequest는 페이지가 변경되지 않는다는 점을 제외하면 post 및 get과 유사한 페이지로드입니다. 서버가 반환하는 모든 정보는 페이지 레이아웃 수정을 포함하여 어떤 방식 으로든 사용할 수 있도록 javascript에서 로컬로 사용할 수 있습니다. 일반적으로 사용자가 페이지를 탐색 할 수있는 동안 비동기 작업을 수행하는 데 사용됩니다. 이에 대한 좋은 예는 텍스트 필드를 완성하기 위해 데이터베이스 값에서 동적으로로드하는 자동 완성 기능입니다. jQuery.ajax와 XMLHttpRequest의 근본적인 차이점은 jQuery.ajax는 XMLHttpRequest를 사용하여 동일한 효과를 얻지 만 더 간단한 인터페이스를 사용한다는 것입니다. jQuery를 사용하는 경우 jQuery.ajax를 사용하는 것이 좋습니다.


XMLHttpRequest 객체 xmlhttp.open, send () 및 responseText를 만드는 것보다 jquery를 사용하는 이점은 무엇입니까?
Rodrigues

XMLHttpRequest 객체는 현재 브라우저에 따라 다르게 인스턴스화됩니다. XMLHttpRequest를 사용하여 기본 인터페이스를 제공하려면 약간의 자바 스크립트 유지 관리를 필요로합니다. 이미 jQuery가있는 경우 모든 작업을 수행합니다. 둘 중 하나를 사용하여 기술적으로 동일한 작업을 수행 할 수 있기 때문에 기능이 아닌 편리함의 문제입니다. jQuery는 XMLHttpRequest 객체를 래핑하므로 특정 작업을 수행하려는 경우 제공한다는 의미입니다.
Neil

좋습니다 .. 제안 해 주셔서 감사합니다. php 또는 aspx로 jquery를 사용하고 디버깅 할 수있는 Visual Studio와 같은 IDE가 있습니까?
Rodrigues

하나는 서버 측이고 다른 하나는 클라이언트 측이기 때문에 자바 스크립트와 php 또는 aspx를 모두 디버깅 할 수있는 IDE를 찾는 것은 어렵습니다. 이는 불행히도 자바 스크립트를 별도로 디버깅해야 함을 의미합니다. 그러나 firebug ( getfirebug.com )는 일반적으로 자바 스크립트 디버깅에 훌륭 하다는 것을 알았습니다 . 콜백 함수에 중단 점을 배치하면 서버에서 제공 한 모든 내용과 단계적으로 자바 스크립트가 수행하는 모든 작업이 표시됩니다. 도움이되기를 바랍니다.
Neil

1

이전 게시물. 하지만 여전히 대답하고 싶습니다. Web Workers (javascript)로 작업하는 동안 직면 한 차이점

웹 작업자는 UI 수준의 액세스 권한을 가질 수 없습니다. 즉, 웹 작업자를 사용하여 실행하려는 JavaScript 코드에서 DOM 요소에 액세스 할 수 없으며, 웹 작업자 코드에서 창, 문서 및 부모와 같은 개체에 액세스 할 수 없습니다.

우리가 알고 있듯이 jQuery 라이브러리는 HTML DOM에 연결되어 있으며이를 허용하면 "DOM 액세스 금지"규칙을 위반하게됩니다. 웹 워커 에서는 jQuery.ajax, jQuery.post, jQuery.get 과 같은 메소드를 사용할 수 없기 때문에 다소 고통 스러울 수 있습니다 . 다행히도 XMLHttpRequest 객체를 사용하여 Ajax 요청을 할 수 있습니다 .


0

마찬가지로 지금까지의 jQuery 방법은 이동로 .post.get간단하게 할 .ajax내부적으로, 그 목적은 추상적으로 떨어져 일부 불필요한 옵션입니다 .ajax일부 기본값은 각각 요청의 유형에 적합한 제공합니다.

3 개 중 어느 것이나 성능에 큰 차이가 있는지 의심합니다.

.ajax메서드 자체는 XMLHttpRequest를 수행하며 나머지 jQuery에 따라 크게 최적화되지만 전체 상호 작용을 직접 조정 한 것처럼 효율적이지 않을 수 있습니다.하지만 이것이 많은 코드 작성 또는 쓰기 jQuery.ajax.


어떤 장점은 jQuery.ajax 사용자 정의에 존재입니다
로드리게스

내 경험상 대부분의 기본값이 원하는 경우, 필요한 데이터를 얻는 방법에 대해 매우 구체적이어야하는 경우 속기 메서드가 유용하다는 것을 알았습니다. ajax는 일반적으로 갈 길입니다.
Steve

감사합니다 스티브. post 및 get을 사용합니다. .ajax의 몇 가지 예를 제공하면 비교를 할 수 있습니다.
Rodrigues
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.