거대한 jQuery 애플리케이션이 있으며 클릭 이벤트에 대해 아래 두 가지 방법을 사용하고 있습니다.
첫 번째 방법
HTML
<div id="myDiv">Some Content</div>
jQuery
$('#myDiv').click(function(){
//Some code
});
두 번째 방법
HTML
<div id="myDiv" onClick="divFunction()">Some Content</div>
자바 스크립트 함수 호출
function divFunction(){
//Some code
}
내 응용 프로그램에서 첫 번째 또는 두 번째 방법을 사용합니다. 어느 것이 더 낫습니까? 성능이 더 좋습니까? 그리고 표준?
답변
표준 이벤트 등록 모델에 따라 사용하는 $('#myDiv').click(function(){
것이 좋습니다 . (jQuery는 내부적으로addEventListener
and를 사용합니다 attachEvent
).
기본적으로 현대적인 방식으로 이벤트를 등록하는 것이 방해없이 이벤트를 처리하는 방법입니다. 또한 대상에 대해 둘 이상의 이벤트 리스너를 등록 addEventListener()
하기 위해 동일한 대상을 호출 할 수 있습니다 .
var myEl = document.getElementById('myelement');
myEl.addEventListener('click', function() {
alert('Hello world');
}, false);
myEl.addEventListener('click', function() {
alert('Hello world again!!!');
}, false);
addEventListener를 사용하는 이유는 무엇입니까? (MDN에서)
addEventListener는 W3C DOM에 지정된대로 이벤트 리스너를 등록하는 방법입니다. 장점은 다음과 같습니다.
- 이벤트에 대해 둘 이상의 핸들러를 추가 할 수 있습니다. 이것은 다른 라이브러리 / 확장 프로그램을 사용하더라도 제대로 작동해야하는 DHTML 라이브러리 또는 Mozilla 확장에 특히 유용합니다.
- 리스너가 활성화 될 때 단계를보다 세밀하게 제어 할 수 있습니다 (캡처 및 버블 링).
- HTML 요소뿐만 아니라 모든 DOM 요소에서 작동합니다.
최신 이벤트 등록에 대한 추가 정보-> http://www.quirksmode.org/js/events_advanced.html
HTML 속성 설정과 같은 다른 방법 , 예 :
<button onclick="alert('Hello world!')">
또는 DOM 요소 속성 , 예 :
myEl.onclick = function(event){alert('Hello world');};
오래되어 쉽게 덮어 쓸 수 있습니다.
HTML 속성 은 마크 업을 더 크고 읽기 어렵게하기 때문에 피해야합니다. 내용 / 구조 및 동작에 대한 우려는 잘 구분되지 않으므로 버그를 찾기가 어렵습니다.
DOM 요소 특성 메소드 의 문제점 은 이벤트 당 하나의 이벤트 핸들러 만 요소에 바인드 할 수 있다는 것입니다.
전통적인 이벤트 처리에 대한 자세한 내용-> http://www.quirksmode.org/js/events_tradmod.html
MDN 참조 : https://developer.mozilla.org/en-US/docs/DOM/event
답변
성능을 향상 시키려면 기본 JavaScript를 사용하십시오. 더 빠른 개발을 위해서는 jQuery를 사용하십시오. jQuery와 Native Element Performance의 성능 비교를 확인하십시오 .
Windows Server 2008 R2 / 7 64 비트의 Firefox 16.0 32 비트에서 테스트를 수행했습니다.
$('span'); // 6,604 operations per second
document.getElementsByTagName('span'); // 10,331,708 operations/sec
클릭 이벤트의 경우 기본 브라우저 이벤트 vs jquery 트리거 또는 jQuery vs 기본 클릭 이벤트 바인딩을 확인하십시오 .
Windows Server 2008 R2 / 7 64 비트에서 Chrome 22.0.1229.79 32 비트에서 테스트
$('#jquery a').click(window.testClickListener); // 2,957 operations/second
[].forEach.call( document.querySelectorAll('#native a'), function(el) {
el.addEventListener('click', window.testClickListener, false);
}); // 18,196 operations/second
답변
내가 이해 한 바에 따르면, 귀하의 질문은 실제로 jQuery를 사용할지 여부에 관한 것이 아닙니다. 오히려 : HTML이나 이벤트 리스너를 통해 이벤트를 인라인으로 바인딩하는 것이 더 낫습니까?
인라인 바인딩은 더 이상 사용되지 않습니다. 또한이 방법으로 하나의 함수 만 특정 이벤트에 바인딩 할 수 있습니다.
따라서 이벤트 리스너를 사용하는 것이 좋습니다. 이런 식으로 많은 함수를 단일 이벤트에 바인딩하고 필요한 경우 나중에 바인딩 해제 할 수 있습니다. 이 순수한 JavaScript 코드를 고려하십시오.
querySelector('#myDiv').addEventListener('click', function () {
// Some code...
});
이것은 대부분의 최신 브라우저에서 작동합니다.
그러나 프로젝트에 jQuery를 이미 포함시킨 경우 jQuery : .on
또는 .click
함수 만 사용하십시오 .
답변
jQuery를 사용하여 함수를 클릭에 바인딩 할 수 있습니다.
<div id="myDiv">Some Content</div>
$('#myDiv').click(divFunction);
function divFunction(){
//some code
}
답변
$('#myDiv').click
JavaScript 코드를 HTML 과 분리하기 때문에 더 좋습니다 . 페이지 비헤이비어와 구조를 다르게 유지해야합니다 . 이것은 많은 도움이됩니다.
답변
표준과 성능을 모두 제공하므로이를 수행하십시오.
$('#myDiv').click(function(){
//Some code
});
두 번째 방법은 간단한 JavaScript 코드이며 jQuery보다 빠릅니다. 그러나 여기서 성능은 거의 같습니다.
답변
IMHO, onclick은 다음 조건이 충족되는 경우에만 .click보다 선호되는 방법입니다.
- 페이지에 많은 요소가 있습니다
- 클릭 이벤트에 등록 할 이벤트는 하나뿐입니다
- 모바일 성능 / 배터리 수명이 걱정됩니다
모바일 장치의 JavaScript 엔진이 같은 세대의 데스크톱보다 4 ~ 7 배 느리기 때문에이 의견을 형성했습니다. jQuery가 사용자 경험과 배터리 수명을 희생하면서 모든 이벤트를 바인딩하기 때문에 모바일 장치의 사이트를 방문하고 불안한 스크롤을 수신하면 싫어요. 최근의 또 다른 지원 요소는 정부 기관에만 문제가되지만;), JavaScript 프로세스가 오래 걸리거나 프로세스를 기다리는 중이라는 메시지 상자가 표시된 IE7 팝업이 있습니다. 이것은 jQuery를 통해 바인딩 할 요소가 많을 때마다 발생했습니다.