AJAX를 사용하면 서버 성능이 크게 향상됩니까?


10

분명히 AJAX는 사용자 인터페이스를 향상 시키지만 서버로드도 줄입니까? 매번 전체 페이지를 제공 할 필요는 없지만 고려하지 않은 다른 변수가있을 수 있기 때문에 그렇게 생각할 것입니다.

답변:


14

그것은 당신이하는 일과 어떻게하는지에 달려 있습니다.

  • 전체 페이지로드를 AJAX 요청으로 바꾸는 경우 (즉, 사용자가 전체 페이지로드 된 항목을 클릭 할 때 AJAX 호출 만 수행하는 경우) AJAX는 처리량이 적고 리턴 량이 적기 때문에 서버로드를 줄입니다. 데이터.

  • 반면, 몇 초마다 서버를 폴링하는 자동 업데이트 유형 AJAX를 추가 하면 사용자에 따라 부하 증가 할 수 있습니다 (사용자가 수동으로 새로 고치기 위해 F5를 계속 누르고 있으면 서버 부하가 증가하지 않을 수 있지만 대부분의 사람들은 일반적으로 몇 시간 동안 그렇게하지 않습니다)

  • 또 다른 AJAX 최적화는 스크롤 할 때 더 많은 데이터 만로드하는 것입니다. 이 경우 사용자가 완전히 아래로 스크롤하지 않으면 처리가 낭비됩니다.

물론 실제로 구현은 어느 쪽이든 결과를 왜곡시킬 수 있으며, 이는 합리적으로 우수한 구현을 가정하는 전형적인 결과입니다.


여기서 중요한 질문은 AJAX 방식으로 전환 할 때 어떤 변화가 있습니까? AJAX로 이동하거나 단순히 작은 조각으로 나눠서 이전에 낭비되었던 작업을 제거 할 수 있습니까? (프로세스에 오버 헤드를 추가)
SplinterReality

3

물론 서버로드를 줄이는 역할을합니다. 에서 봐 jsconf'09 @이 프레젠테이션 - 페이스 북이 그렇게 아약스를 사용하는 방법에 대한.

Ajax는 비동기입니다. 서버 통신-다양한 방법으로 사용할 수 있습니다. 사람들은 간단한 JSON을 실시간 웹에로드하는 데 사용하며 그 사이의 모든 것을 사용합니다.

실제 과제는 클라이언트와 서버 간의 균형 입니다. 각 당사자가 시스템을 최적화하고 인식 된 응답 성과 실제 속도의 명백한 이점을 얻을 수 있도록 업무를 수행하도록 노력하십시오.


3

고려하지 않는 다른 요소가 있습니다. 대부분의 경우 AJAX는 서버로드를 증가시킵니다. 일반적인 비 아약스 시나리오에서 사용자는 몇 초 또는 몇 분마다 하나의 큰 페이지를로드합니다. 예, 해당 단일 페이지는 서버에서 약간 더 많은 작업이지만 요청간에 다른 요청을 복구하고 제공하는 데 많은 시간이 필요합니다. AJAXified 시나리오에서 단일 페이지로드는 이제 수십 번의 작은 적중으로 서버를 지속적으로 망치고 응답을 기다립니다.

그것은 1000 컷으로 인한 죽음과 비슷합니다. 요청 자체가 그다지 크지는 않지만 총 무게는 킬러입니다. 특히 이러한 작은 요청이 전체 페이지 요청으로 사용하기에는 비용이 많이 든다는 것을 고려하기 시작할 때 특히 그렇습니다. 두 경우 모두 전체 웹 애플리케이션 파이프 라인을 통해 실행 중일 수 있으며 귀중한 HTTP 연결에 앉아있는 동안 데이터베이스에 충돌하고 응답을 기다리는 중입니다.

다음은 서버에서 ajax가 어떻게 추악해질 수 있는지에 대한 예입니다. 위젯을위한 4 개의 슬롯이있는 일반적인 "실행 대시 보드"를 보자. CEO가 오른쪽에 전체 판매 보고서, 중간에 상위 10 명의 수익자 목록, 오른쪽에 회사 주가 보고서를 좋아한다고 가정합니다. 간단한 아약스 원격 요청을 통해이 작업을 수행한다고 가정하겠습니다. 스타일 시트, 이미지 및 기타 자산을 고려하지 않고 이제 서버에 대해 4 개의 HTTP 왕복 (기본 페이지, 각 대시 보드 보고서)이 필요합니다. 이들 각각을 실행하려면 완전한 웹 스택이 필요합니다. 웹 프레임 워크를 사용하여 데이터베이스를 공격하고 HTML을 렌더링 할 것입니까? 이제 단일 CEO와 일부 원격 사용자가있는 2000 명의 원격 사용자를 곱하십시오.

반대로, 보고서를 렌더링하기 위해 HTML 스켈레톤과 데이터 (인 페이지 JSON에 포함)를 실행하고 반환하는 단일 서버 측 페이지를 가질 수 있습니다. 하나의 더 큰 연결이지만 4 개의 요청을 처리하지 않고 4 개의 파이프 라인을 회전시키기 때문에 웹 서버에서 전체적으로 덜 치는 경우


1
AJAX에서 필요로하지 않는 작은 요청의 예를들 수 있습니까?
jhocking

1
물론,이 사이트에서 누군가가 이미 질문에 대답했는지 어떻게 알 수 있습니까? 이것은 작은 아약스 요청을 통해 달성됩니다. . .
Wyatt Barnett

@WyattBarnett AJAX는 반드시 폴링을 의미하지는 않습니다. 전체 페이지로드를 부분 페이지로드로 간단히 대체 할 수 있습니다. 많은 경우 서버로드가 증가 할 수 있지만 "대부분의 경우"에는 해당되지 않습니다.
Davy8

흠, 그 예는 다른 것보다 더 많은 서버 요청이 필요한 것보다는 AJAX에서 할 수있는 것보다 더 할 수 없습니다. "정확히 동일한 작업을 수행 할 때 더 많은 성능을"의미하거나 "AJAX를 최대한 활용할 때 더 많은 성능을"의미하는 경우 OP가 확실하지
않다고 생각합니다.

1
폴링 / 롱 폴링은 "comet" 이라고도하는 AJAX (여기에서 언급 한)의 하위 집합입니다 . "진정한"폴링없는 푸시 또는 서버 측 (서버 시작) AJAX 를 가능하게하는 웹 소켓 은 이러한 종류의 기능에 필요한 자원 낭비를 크게 줄입니다.
Alan H.

2

서버가 수행하는 작업을 AJAX를 사용하여 교체하는 경우 서버 성능이 향상됩니다. 그러나 서버가 여전히 많은 작업을 수행하도록 AJAX에서 발생하는 모든 작업이 서버가 이미 수행 한 작업 위에 있다는 것을 설계했을 수 있습니다.

클라이언트 쪽에서 다른 작업을 수행해서는 안되기 때문에 대부분 UI에 관한 것입니다. 기본적으로 서버가 UI를 지원하기 위해 수행 한 모든 작업 (예 : 사용자 입력에 따라 다른 레이아웃으로 페이지를 다시로드)은 JavaScript를 대신 사용합니다.


0

HTML 렌더링이 응용 프로그램 서버 성능 프로필의 큰 부분 인 경우 HTML 렌더링을 클라이언트로 이동하면 응용 프로그램 서버에서 성능이 향상 될 수 있습니다.

그러나 HTML 렌더링이 응용 프로그램 서버 성능 프로필의 일부인 경우 일반적으로 요청이 많을수록 스택을 통한 더 많은 트립, 더 많은 쿼리, 응용 프로그램 서버의 모든 것, 성능 손실을 의미합니다.

물론, 특정한 경우를 아는 유일한 방법은 시도해 보는 것입니다.


1
AJAX를 사용하면 AJAX없이 동일한 작업을 수행하는 것보다 더 많은 요청을 발생시키는 예제를 생각하는 데 어려움을 겪고 있습니다. 예를 들어 줄 수 있습니까?
jhocking

1
HTML은 항상 클라이언트 쪽에서 렌더링됩니다.
Jonas

1
아마도 그는
잘못된 말을했으며

뷰 / 템플릿에서 시작하여 변수와 결합하고 원시 HTML을 렌더링합니다.
yfeldblum

AJAX는 다음과 같은 경우 AJAX없이 동일한 작업을 수행하는 것보다 더 많은 요청을 발생시킵니다. 예를 들어 Facebook을 참조하십시오.
yfeldblum

0

솔루션을 구현하는 가장 좋은 방법을 고려해야합니다. 단순한 비 동적 형태는 아약스가 필요하지 않으며 추가하면 실제로 성능에 해를 줄 수 있습니다. 문제가 나쁜 쿼리라면 전 세계의 모든 아약스 최적화가 성능 향상을 얻지 못할 것입니다.

서버가 과도하게 작동하면 이유를 알아야합니다.

많은 히트가 발생하면 ajax가 해당 문제를 해결하지 못하므로 더 많은 용량이 필요합니다. 아약스를 추가하면 서버가 처리해야하는 요청 수가 늘어납니다.

복잡한 페이지가있는 경우 클라이언트 측에서 서버의로드를 줄이기 위해 수행 할 수있는 작업이 있는지 확인해야합니다. 페이지가 동적이지만 실제로 클라이언트 측 조정을위한 데이터 패키지 캐싱이 제한된 경우 더 나은 결과를 얻을 수 있습니다.

때로는 Ajax가 도움이 될 것입니다. 동적 데이터가 포함 된 복잡한 양식을 사용하면 당일 승리합니다. 그러나 쿼리가 복잡하고 실행하는 데 시간이 오래 걸리더라도 ajax는 여전히 문제를 해결하지 못합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.