2012-08-10 2 views
5

예를 들어 100 쿼리/초를 처리 할 수있는 웹 규모의 공용 사이트를 구축해야합니다. Ajax를 사용하여 대화 형으로 만들고 싶습니다. Ajax는 모든 주요 브라우저와 모든 합리적인 상황에서 방탄해야합니다 (클라이언트 측에서 페이지를 다시 시작하고, 밤새도록 터미널을 떠난 후 다음날 다시 돌아 오는 등). 서버는 분산 된 Linux 팜이됩니다.

Jquery $ .post()가 청구서에 맞는 것 같습니다.

예전에는 서버와 클라이언트간에 소켓을 개방 상태로 유지하기 위해 영리한 방식으로 Ajax를 구현했습니다. 그런 다음이 방법은 서버가 클라이언트에 대한 패킷을 시작할 수 있도록하는 양방향 통신 파이프 인 "HTTP Server Push"또는 "Comet"인 "Ajax Push"를 지원합니다.

이 Ajax 접근법에서 볼 수있는 주된 문제점은 분명히 오랜 시간 동안 무기한으로 서버의 소켓을 연결한다는 것입니다. 이것은 확장되지 않는 것 같습니다. 부차적 인 문제는 모뎀 연결을 밤새 끊으면 파이프가 손상된다는 것입니다. 저장된 로컬 버전에서 페이지를 다시로드하면 라이브 파이프가 다시 설정되지 않습니다. 여러 브라우저는 Ajax를 처음부터 작동 시키려면 여러 가지 신뢰할 수없는 해킹이 필요합니다.

게시 요청을 기반으로하는 엄격한 "클라이언트 끌어 오기"모델을 사용하면 이러한 모든 단점을 해결할 수 있습니다. 방탄 실장 기판을 얻을 수 있다면, 요청하지 않은 서버 푸시 용 용량을 포기하게되어 기쁩니다. 그래서 적어도 파이어 폭스와 사파리 꽤 잘 작동하는 것 같다 간단한
$.post('serverAjaxModule.php' ,
{mydata: Dataword },
function(output){ do_handle_results(output); });

호출을 사용하고

.

그러나 나는 이것이 두포에서 무엇을하는지 알지 못합니다. 나는 .post가 .ajax를위한 매크로이고, .ajaxSetup과 .ajaxStart와 같은 명령어가 필요한 것처럼 보입니다. 그리고 나서 jquery-ui.min.js include가 있는데, 이는 설치 프로그램으로 거의 모든 것을 실행할 수 있습니다. 다음

내 질문 : JQuery와 $의 .post 대규모 사용에, 잘 확장 하는가

  1. ?

  2. $ .post는 이전의 연속 개방형 소켓 패러다임으로 구현 되었습니까? 아니면 클라이언트 끌어 오기 아약스 메시지를 수행 할 때마다 새 소켓 연결을 설정합니까? 함의?

  3. 바로 내가하지 필요는 등 .ajaxSetup도 .ajaxStart, 같은 아무것도 추가, 전화를 할 생각에 내가 오전, 난 그냥 가서 이상한 결과없이 .post 성공적으로 $를 호출 할 수 있습니다 ?

  4. jquery 크로스 브라우저 기능이 얼마나 좋습니까? 나는 근본적으로 모든 합리적인 현대 브라우저를 위해 간단하게 일하는 것에 의존 할 수 있습니까, 아니면 제가주의해야 할 것들이 있습니까?

  5. Ajax 기술에 대한 이러한 접근 방식은 고대 브라우저에서 얼마나 오래 지속됩니까? . post는 왕복 POST 기술을 사용하는 것으로 보입니다.이 기술은 완벽하고 보편적이어야합니다. 아직 일부 브라우저가 너무 오래되어 Ajax를 지원할 수없는 오래된 기술을 기억하고있는 것 같아서 우리는 그 주위를 힘들게 코딩해야했습니다. 새로운 jquery와 함께, 그 시절은 사라 졌나요? 문명화 된 세계에서 비 Ajax 지원에 대해 얼마나 걱정해야합니까?

  6. 주의해야 할 사항이 있습니까? 대규모 확장 성 구현을 막 시작한 사람이라면 동적 인 인터랙티브 한 웹 경험을 만드는 것에 대해 누군가가 말했던 가장 중요한 점은 무엇입니까?

많은 도움을 주셔서 감사합니다.

+0

+1 흥미로운 질문 –

+0

여러분, 친절하게도 여러분의 의견에 5 번과 6 번은 대답합니다 ... whatdaya는 생각하십니까? 사람들이 알게하십시오. 건배. – DragonLord

답변

3

$.ajaxSetup이 필요하지만 유용되지 않습니다

  • 당신은 $.post 당신이 힘들 것 기능과 디버깅을 처리 오류를 정의 할 수 없습니다 실행하는 경우 -이 경우 당신이 일반 오류 함수를 정의 할 수 있습니다 $.ajaxSetup;
  • $.post을 실행하고 표시해야하는 HTML 데이터를 수신하고 해당 요소에 이벤트 바인딩이 필요하면이 새 개체에 다시 적용해야하는 이벤트 처리기를 정의 할 수 있습니다.

$.ajaxStart도 필요하지 않습니다.

jQuery UI는 요소 삭제 동작, 정렬 가능한 요소 동작 및 아코디언 메뉴, 모달 메시지 상자 등의 일부 위젯을 드래그하는 등의 다른 라이브러리와 함께 제공되는 사용자 인터페이스 코어 라이브러리입니다. 실제로 API를 사용하여 프런트 엔드를 구축하려고합니다.

1 확장 성이 없다는 건설적인 이유가 없습니다. 물론 밀리 초마다 요청을 서버에 적용하면 수는입니다 (많은 동시 사용자가있는 경우) 서버를 중단 시키거나 (연결이 무한 루프로 열리는 경우) 브라우저를 충돌 시키거나 두 경우 모두에서 인해 더 큰 침체가 발생할 수 있지만 (예 : IE6과 같은) 일부 브라우저 - 즉, 그것은 잘 IE6를 포함한 모든 브라우저에서 작동

4 열린 소켓

3 Yes (예)를 유지하지 않습니다 나쁘지 장인에게

2의 더 많은 양의 JavaScript 코드 (및 메모리 누수)

5 IE6

6

  • 브라우저 오랜 시간 동안 개방되는 땅콩 버터와 같은 메모리를 먹고;
  • JSON은 친구입니다. 프론트 엔드 로직을 염두에두고 앱을 작성하십시오. HTML을 사용하여 HTML로 빌드하지 마십시오. 복잡한 작업 (AJAX를 통해받은 모든 새 객체에 이벤트 핸들러를 리 바인드해야합니다. 방금받은 HTML의 큰 블로그에 대한 작은 서식 지정 액세스).
  • JSON으로 데이터를 가져오고, Mustache.js와 같은 프런트 엔드 템플릿 엔진을 사용하여 JSON을 사용하여 데이터를 작성하십시오.

메모리 누수 및로드 된 및 사용되지 않은 콘텐츠는 일반적으로 새로 고침 (특히 Chrome) 후에 삭제됩니다. 반면에 Firefox는 실제 메모리 조작자입니다. 활동이 없어도 열려 있어도 6 ~ 12 시간이 걸릴 수 있습니다. 메모리 사용량이 증가합니다.

+0

사려 깊은 답변과 첫 번째 답변에 감사드립니다. – DragonLord

+0

페이지 당 또는 브라우저 실행 세션마다 메모리 누수가 있습니까? 즉, 페이지를 새로 고치거나 바꾸면 오래된 닫힌 페이지에 대한 누수를 지우거나 (GC) 브라우저 인스턴스가 종료 될 때까지 계속 남아있게됩니까? [희망찬 생각이지만 나는 물어야한다.] 아무런 타격도 없지만 아마 500 아약스는 2 ~ 3 시간 안에 잡아낼 것이다. JS 쓰레기는 사용하지 않는 개체에서옵니다. 링크를 해제하고 참조를 지우면 JS GC가 처리하지 않거나 jQuery가 이전 아약스 객체에 대한 참조를 유지합니까? 브라우저 JS 구현에 따라 다릅니 까? 이 문제에 대해 잘 알고 있습니다. JS/jQ 명령이 누출 된 것을주의해야합니까? 감사. – DragonLord

+0

초기 답변에 대한 응답을 첨부했습니다. –

0

브라우저 고고학의 전문가가 아니더라도 적절한 Ajax를 지원하지 않는 구식 브라우저의 문제 해결 방법으로 Comet을 회상하는 것이 잘못되었다고 생각합니다. 혜성은 이국적인 특별한 경우 였고, 당신은 그것이 잘못 자주 저울질하는 것이 맞습니다. 그러나 현재 사용중인 브라우저에서 Ajax 지원에 대해 걱정할 필요는 없습니다. 문제가 해결되어야합니다.

+1

이것은 대답이 아닌 주석이어야합니다. –

관련 문제