2010-07-02 8 views
3

jQuery 글로벌 이벤트 및 성능?

가 발생할 경우에, 나는 jQuery를 사용하여 상태 표시기를 표시 할 수있는 방법을 찾아이었고, 나는 jQuery를 요리 책의 솔루션은, 그것이주의 다음이 솔루션

(function($) { 
    $(document).ready(function() { 
     $('#ajaxStatus') 
     .ajaxStart(function() { 
      $(this).show(); 
     }) 
     .ajaxStop(function() { 
      $(this).hide(); 
     }); 

     ..... 
    })(jQuery); 

을 보였다 발견 성능 문제는 응용 프로그램에서 이벤트 전파 비용 중 상당히 큰 숫자 인 경우 수입니다. 이 경우 global을 false로 설정하면 의 성능이 향상 될 수 있습니다.

먼저 위에서 설명한 해결책을 사용해야하며 내 사이트와 js 코드가 더 커지고 커짐에 따라 성능 문제가 발생합니까?

jQuery 전역 이벤트를 피하는 것이 좋겠습니까?

마지막으로, 어떻게 아약스 요청을 수행하는 동안 간단한 표시기를 보여줄 수 있습니까?

답변

9

솔직히 나는이주의가 유효한일지도 모르지만, 구식이라고 생각합니다. http://github.com/jquery/jquery/blob/master/src/event.js#L290

그것은 글로벌 이벤트 지금 취급 방법을 보여줍니다 : 여기에 jQuery를 소스 봐

그것은 가 될을 사용
if (jQuery.event.global[ type ]) { 
    jQuery.each(jQuery.cache, function() { 
    if (this.events && this.events[type]) { 
     jQuery.event.trigger(event, data, this.handle.elem); 
    } 
    }); 
} 

:

jQuery("*").add([window, document]).trigger(type, data); 

을 그래서에 게재하고 있지 않습니다 요소는 매우 많은 실제 요소를 경고하는 요소 였지만, 대신 eleme를 반복합니다. 등록되어 있거나 이벤트가있는 경우에만 이 등록되어 있으므로 의 성능이 향상되었습니다. 귀하의 질문


:

그래서 처음에는 보여 주었다 위의 솔루션을 사용해야하고 내 사이트로 성능 문제가 될 것이며, JS 코드가 크고 커질수록

?

예, 위에서 설명한 글로벌 이벤트 최적화 이후에 문제가 될만큼 충분한 페이지를 아직 보지 못했습니다.

jQuery 전역 이벤트를 피하는 것이 좋겠습니까?

아니요, 여러분은 그 문단을 무시할 수 있습니다. this change을 만든 후에는 아무 jQuery도 사용하지 않습니다.

마지막으로, 어떻게 아약스 요청을 수행하는 동안 간단한 표시기를 보여 줍니까?

정확히 당신이 당신의 질문 :)에 가지고

+0

너무 닉 감사합니다! 사실 제가 언급 한 책은 작년에 쓰여졌습니다. 그 이후로 개선 된 사항을 알면 크게 도움이 될 것입니다. 감사. –