본문 바로가기

Web For All

jQuery 1.4.2 릴리즈


더욱 빨라진 jQuery 1.4.2 릴리즈

PDF
4366089781_509c29aff8.jpg
jQuery 1.4 정식버전이 발표된지 한달만에 두번의 마이너 업데이트가 있었습니다. 최근 발표한 jQuery 1.4.2는 종전에 비해 성능이 더욱 향상되었습니다. 좌측의 그래프를 보면 약 30% 이상 처리 속도가 개선된 것을 확인할 수 있습니다. 빈번한 호출이 일어나는 메서드들을 최적화하고DOM 처리 성능 끌어올린 결과라고 합니다. 그리고 새로운 메서드인 .delegate()와 .undelegate()가 추가되었습니다. .live()와 .die() 메서드를 보완하려는 목적으로 추가된 메서드입니다. 이밖에도 일부 버그가 수정되었다고 하네요. John Resig씨 좀 짱인듯.

//For example:
$("table").delegate("td", "hover", function(){
  $(this).toggleClass("hover");
});

//This is equivalent to the following code written using .live():
$("table").each(function(){
  $("td", this).live("hover", function(){
    $(this).toggleClass("hover");
  });
});

//Additionally, .live() is roughly equivalent to the following .delegate() code.
$(document).delegate("td", "hover", function(){
  $(this).toggleClass("hover");
});

회사 프로젝트에 1.4.2를 적용하는 과정에서 작은 문제가 발생했습니다. IE계열 브라우저에서만 발견되는 이벤트 핸들러에서 발생한 오류였습니다. 오류 메시지는 "'events' is null or not an object"었던 것으로 기억합니다. Uncompressed 버전의 소스 1,919라인을 보면 아래와 같은 코드를 발견할 수 있습니다.
var events = jQuery.data(this, "events"), handlers = events[ event.type ];

이 코드에서 events 변수에 null이 할당 되어 버리는 현상이 있더군요. 문제가 발생하지 않는 1.4.1 버전에서 어떻게 처리하고 있나 살펴보니 아래와 같은 코드가 사용되고 있더군요.
handlers = ( jQuery.data(this, "events") || {} )[ event.type ];

그래서 다음과 같이 수정하니 문제 없이 잘 작동합디다.
var events = jQuery.data(this, "events") || {}, handlers = events[ event.type ]; //fixed by.

혹시, 저와 동일한 문제를 격고 계시면 요렇게 패치 해 보세요.

참조: http://firejune.com/1556&stag=jQuery