짧은 대답
아약스는 당신이 그것으로 무슨 일을하는지에 따라, 한 번만 비용이 여부, 클라이언트와 서버 모두에 대한 비용을 가지고 있습니다.
긴 대답
WebSocket을 종종 있기 때문에이 전체의 오해 "할 것입니다 이봐, 사용 아약스,!". 아닙니다. 웹 소켓은 Ajax를 대신 할 수 없습니다. 잠재적으로 동일한 필드에 적용될 수 있지만 Websocket을 사용하는 것은 터무니없는 경우가 있습니다.
간단한 예를 들어 보겠습니다. 페이지가 클라이언트 측에로드 된 후 데이터를로드하는 동적 페이지. 간단합니다. Ajax 전화를 걸자. 서버에서 클라이언트까지 한 방향 만 있으면됩니다. 클라이언트는이 데이터를 요청할 것이고, 서버는 클라이언트에게 클라이언트를 보냅니다. 왜 그런 작업을 위해 웹 소켓을 구현합니까? 당신은 당신의 연결이 항상 열려 있어야 할 필요가 없습니다, 당신은 클라이언트가 끊임없이 서버에 물어볼 필요가 없으며, 서버에 클라이언트를 알릴 필요가 없습니다. 연결을 열어두면 자원을 낭비합니다. 연결을 열어두기 위해서는 끊임없이이를 확인해야합니다.
이제 채팅 응용 프로그램의 경우는 완전히 다릅니다. 클라이언트가 새로운 것이면 x 초 또는 밀리 초마다 서버에 요청하도록 강제하지 않고 서버가 클라이언트에 통지해야합니다. 그것은 말이되지 않습니다.
더 잘 이해하려면 두 사람으로 확인하십시오. 둘 중 하나는 서버이고, 이상은 클라이언트입니다. 아약스는 편지를 보내는 것과 같습니다. 클라이언트가 문자를 보내면 서버는 다른 문자로 응답합니다. ? 사실은 대화가 그렇게 될 것 채팅 응용 프로그램,이다 : 이봐, 서버 나를 위해 뭔가있어
- - - - - 제
을
"이봐 서버,
나를 위해 뭔가있어 제
를? - 헤이 서버, 나에게 뭔가있어?
- 예, 여기 있습니다. "
클라이언트가 응답을 요청하지 않은 경우 서버는 실제로 클라이언트에게 문자를 보낼 수 없습니다. 거대한 자원 낭비입니다. 모든 Ajax 요청에 대해 캐시 된 경우에도 서버 측에서 작업해야한다.
이제 Ajax로로드 된 데이터로 앞에서 설명한 경우가 있습니다. 클라이언트가 서버에 전화를한다고 상상해보십시오. 연결을 활성 상태로 유지하면 비용이 발생합니다. 그것은 전기 비용이 들고 운영자에게 비용을 지불해야합니다. 왜 그 사람이 당신에게 3 단어를 말하기를 원한다면, 왜 누군가에게 전화를해서 1 시간 동안 전화를해야합니까? 빌어 먹을 편지를 보내.
결론 웹 소켓은 Ajax를 대체하지 않습니다!
가끔 이 필요합니다. 아약스, 웹 소켓 사용법이 어리석은 곳.
편집 : SSE의 경우 기술이 널리 사용되지하지만 유용 할 수
. 이름에서 알 수 있듯이 Server-Sent Events는 서버에서 클라이언트로의 단방향 푸시입니다. 클라이언트가 아무 것도 요청하지 않으면 서버가 데이터를 보냅니다. 한마디로
:
이 - 클라이언트에서 단방향 : - : SSE
- 양방향 : 아약스
서버에서 단방향 다른 사람들이 어떤 상황에서 과잉이 될 수 열려있는 연결을 유지 말했듯이
나는 이것이 옳다고 믿습니다. 양방향 통신이 필요없는 응용 프로그램에서는 서버에서 ajax 요청이 훨씬 더 쉬워집니다. 또한 HTML5 오프라인 지속성을 사용할 수있게되면 (기본적으로 웹 소켓이 더 많이 사용 가능할 때와 마찬가지로) 웹 응용 프로그램은 필요에 따라 서버와 동기화됩니다. – badunk