2012-02-08 3 views
0

$("*").click(function(){...})은 비싼 것으로 간주됩니까?-See here.클릭당 비용이 많이 드는 클라이언트에서 Ajax 요청을 보내고 있습니까?

클릭 할 때마다 ajax 요청을 보내는 것은 어떻습니까?

일반 사용자에게 눈에 띄는 (perf?) 문제가 발생합니까? 이 앱은 빠르게 정상적인 웹 앱을 클릭해야하는 게임이 아닙니다. 상대적으로 드문 클릭이 있습니다.

예를 들어 사이트로 스택 오버플로를 가져옵니다. 이것이 SO에서 수행 된 경우 비용이 많이 듭니까?

참고 - 연결된 질문에서 나는 적어도 일부 브라우저에서는 $("*").click()이 자체적으로 끔찍한 성능을 보일 것이라는 사실을 알게되었습니다. 퍼포먼스 호그가 아닌, 내가 원하는 것을 (클릭 할 때마다 아약스 요청 보내기) 할 수있는 더 나은 기술이 있습니까? 답변은 live()입니까?

참고 - 나는 엄청난 수의 동시 사용자가있을 것으로 예상하지 않기 때문에 클라이언트에 집중하고 있습니다. 나는 서버가 그것을 처리 할 수 ​​있다고 믿는다.

답변

1

, 당신은 대신 모든 요소를 ​​바인딩의 delegate 방법을 사용한다 :

$('body').delegate('*', 'click', function(){ ... }); 

이 몸 요소를 하나의 이벤트 처리기를 바인딩 및 이벤트를 처리 할 때까지에서 그들은 거품 클릭 된 요소

모든 클릭에 대해 AJAX 요청을 보내면 브라우저에 많은 영향을 미치지 않지만 사용자가 많은 경우 서버에서 무거울 수 있습니다. 또한 한 번에 여러 번 클릭하면 요청이 서버에 대기하게되고 모든 응답이 브라우저로 다시 전송되는 데 시간이 걸립니다.

+0

이것이 기돈의 해결책과 어떻게 다른가요? – ripper234

+0

jQuery 1.7 이후부터'.delegete()'는'.on()'메소드로 대체되었습니다. – ripper234

+0

1. 이것은 모든 클릭을 포착하는 것 같지 않습니다. 2. 한 번의 클릭으로 톤 (~ 10) 개의 이벤트가 생성되는 경우가 있습니다. 3. jQuery가 제안한 것처럼'.delegate()'를''로 변경하면 완전히 작동하지 않습니다. 나는 편리함이 없다. – ripper234

0

nah! 아약스는 배후에 happes를 요청합니다. 귀하의 사용자는 통지하지 않습니다. 모든 분석 도구가이를 사용하므로 왜 우리가 걱정해야하는지 궁금합니다.

Stackoverflow 나는 자신의 클릭 추적 광고가 장면 뒤에서 실행하게 될 것입니다.

나는 당신이 좋은 하드웨어와 모든

+0

문제가 아닌지 또는 이론입니까? 표창장 있어요? – ripper234

+0

그게 문제가 아니야. 우리는 testcomplete를 통해 많은 클릭이 무작위로 생성 된 사이트를 테스트했습니다. 사이트를 사용하는 경우 clicktale과 거의 같은 일을합니다. 또한 클릭 추적을 최적화 할 수 있습니다. 예를 들어 세션에 대한 클릭 수를 기록하고 사용자가 페이지를 떠나기 직전에 해당 데이터를 서버에 게시하거나 100 개의 일괄 처리로 게시 할 수 있습니다. 일반적으로 아약스 요청은 일반적인 웹 사이트 트래픽과 거의 비슷합니다. Google 홈페이지를 말 하시겠습니까? 수십억 시간 봉사 하는게 어떨까요? 또는 google 자동 제안 상자 –

+0

다른 브라우저를 사용하는 최종 사용자의 환경을 테스트 했습니까? 아니면 서버로드 만 테스트 했습니까? – ripper234

1

클라이언트 현명한 의미와 동시에 너무 많은 아약스 요청을 보내지 않는 경우는, 확인을해야 좋은 대역폭 처리량을 가지고, 그것은 확인을해야합니다. 약 30 개의 open ajax 요청을 실행하면 (심지어 Chrome에서 멈추는) 많은 작업이 느려질 것입니다.

모든 요청을 처리해야하는 서버 측에서 문제가 더 많을 수 있습니다.

업데이트

$(document.body).on('click' , function(e) { 
    //here i handle all clicks in the document 
    //the source of the click is 
    var src = e.target; 
}); 
+0

동시 사용자가 많지는 않을 것으로 예상되며 각 활성 사용자는 매 1-30 초마다 클릭합니다. 서버는 괜찮을 것입니다. – ripper234

+0

그래서 아무 문제도. – Gidon

+0

그럼'$ ("* *)). (...)'또는 다른 것을 사용 하시겠습니까? – ripper234

0

당신은 모든 클릭 이벤트에 서버 요청을 보내는 경우 해당 서버에 부담을 만들 수 있습니다. 100 명의 사람들이 동시에 그것을 사용하고 웹 서버가 응답을 요구하는 900 건의 요청보다 10 초 후에 3 초마다 클릭합니다.

주의하십시오. 이 경로를 선택하는 경우 브라우저 캐싱을 활용하여 응답해야합니다. 당신은 어디서나 클릭을 잡으려고합니다

+0

대역폭이 많고 콘텐츠 전달 네트워크가 좋은 경우에만이 작업을 수행하십시오. –

+0

업데이트 된 질문 - 현재 클라이언트에 초점을 맞추고 있는데, 이것이 사용 패턴에 대한 서버로드를 생성하지 않는다고 생각합니다. – ripper234

+1

그런 경우 많은 시간 초과 요청 (사용자 대역폭도 고려해야 함)이있는 경우 최종 사용자에게 불만족스러운 사용자 환경을 만듭니다. 요청이 올바르게 구성되어 있고 동시 요청이 타인의 결과에 달려 있지 않은지 확인하십시오. –

관련 문제