목차
올바른 선택기 사용
상위-하위 관계 이해
예를 들어 다음 작성 방법은 나쁜 작성 방법입니다:
少改动DOM
尽量少生成jQuery对象
웹 프론트엔드 JS 튜토리얼 jQuery의 코드 최적화에 대한 자세한 지침

jQuery의 코드 최적화에 대한 자세한 지침

Jun 09, 2018 am 10:46 AM
jquery 코드 최적화

이 글에는 모든 사람을 위한 jQuery 코드 최적화 방법이 요약되어 있습니다. 이 분야에 필요한 사항이 있으면 함께 배워보세요.

올바른 선택기 사용

jQuery에서는 여러 선택기를 사용하여 동일한 웹 페이지 요소를 선택할 수 있습니다. 각 선택기의 성능은 다르므로 성능 차이를 이해해야 합니다

1. 가장 빠른 선택기: ID 선택기와 요소 레이블 선택기

예를 들어 다음 명령문이 가장 성능이 좋습니다.

$('#id')
$('form')
$('input')
로그인 후 복사

이런 선택기를 만나면, jQuery는 브라우저의 기본 메소드(예: getElementById())를 자동으로 호출하므로 빠르게 실행됩니다.

2. 느린 선택기: 클래스 선택기

$('.className')의 성능은 브라우저에 따라 다릅니다. Firefox, Safari, Chrome 및 Opera 브라우저에는 모두 기본 메소드 getElementByClassName()이 있으므로 속도가 느리지 않습니다. 그러나 IE5-IE8에서는 이 방법을 배포하지 않았으므로 IE

3에서는 이 선택기가 상당히 느립니다. 가장 느린 선택기: 의사 클래스 선택기와 속성 선택기

웹 페이지에서 숨겨진 요소를 모두 찾으려면 이 방법을 사용해야 합니다. 의사 클래스 선택기:

$(':hidden')
로그인 후 복사

속성 선택기의 예는 다음과 같습니다.

$('[attribute=value]')
로그인 후 복사

이 두 문은 브라우저에 기본 메서드가 없기 때문에 가장 느립니다. 그러나 일부 새 버전의 브라우저에는 querySelector() 및 querySelectorAll() 메서드가 추가되어 이러한 유형의 선택기 성능이 크게 향상됩니다.

상위-하위 관계 이해

다음 6개 선택자는 모두 상위에서 파생됩니다. element

$('.child', $parent)
$parent.find('.child')
$parent.children('.child')
$('#parent > .child')
$('#parent .child')
$('.child', $('#parent'))
로그인 후 복사

1에서 하위 요소를 선택합니다. 다음 명령문은 주어진 DOM 객체에서 하위 요소를 선택한다는 의미입니다. jQuery는 자동으로 이 명령문을 $.parent.find('child')로 변환하므로 특정 성능 손실이 발생합니다. 가장 빠른 형태보다 5~10% 느립니다

$('.child', $parent)
로그인 후 복사

2. .find() 메소드는 브라우저의 기본 메소드(getElementById, getElementByName, getElementByTagName 등)를 호출하므로 더 빠릅니다

$parent.find('.child')
로그인 후 복사

3 이 명령문은 $.sibling() 및 javascript의 nextSibling( ) 메소드, 노드 순회를 사용합니다. 하나씩. 가장 빠른 형식

$parent.children('.child')
로그인 후 복사

4보다 약 50% 느립니다. jQuery는 내부적으로 Sizzle 엔진을 사용하여 다양한 선택기를 처리합니다. Sizzle 엔진의 선택 순서는 오른쪽에서 왼쪽이므로 이 명령문은 .child를 먼저 선택한 다음 #parent 상위 요소를 하나씩 필터링하여 결과적으로 가장 빠른 형식보다 약 70% 느립니다

$('#parent > .child')
로그인 후 복사

5. 이 진술은 이전 진술과 동일합니다. 그러나 이전 버전은 직접 하위 요소만 선택하는 반면, 이번 버전은 다중 레벨 하위 요소를 선택할 수 있으므로 가장 빠른 형식보다 약 77% 느립니다.

$('#parent .child')
로그인 후 복사

6 jQuery는 이 명령문을 내부적으로 $로 변환합니다. ('#parent').find('.child')는 가장 빠른 형식보다 23% 느립니다

$('.child', $('#parent'))
로그인 후 복사

그래서 최선의 선택은 $parent.find('.child')입니다. 게다가 이전 작업에서 $parent가 생성되는 경우가 많기 때문에 jQuery에서 이를 캐시하므로 실행 속도가 더욱 빨라집니다. jQuery가 아무리 빨라도 네이티브 자바스크립트 방식과 비교할 수는 없습니다. 따라서 사용할 수 있는 네이티브 메소드가 있는 경우에는 jQuery를 사용하지 않는 것이 좋습니다.

가장 간단한 선택기를 예로 들면 document.getElementById("foo")는 $("#foo")보다 10배 이상 빠릅니다.

클릭 이벤트를 처리하는 함수를 a에 바인딩하는 또 다른 예를 살펴보겠습니다. element :

$('a').click(function(){
    alert($(this).attr('id'));
  });
로그인 후 복사

이 코드의 의미는 a 요소를 클릭하면 해당 요소의 id 속성이 팝업된다는 것입니다. 이 속성을 얻으려면 jQuery를 연속해서 두 번 호출해야 합니다. 첫 번째는 $(this)이고 두 번째는 attr('id')입니다.

사실 이런 처리는 전혀 필요하지 않습니다. 더 정확한 작성 방법은 기본 JavaScript 메서드를 사용하여 this.id를 직접 호출하는 것입니다.

$('a').click(function(){
    alert(this.id);
  });
로그인 후 복사

테스트에 따르면 this.id의 속도는 $(this).attr('id보다 20배 이상 빠릅니다. ')

캐시를 잘

특정 웹페이지 요소를 선택하는 것은 비용이 많이 드는 단계입니다. 따라서 선택기를 가능한 한 적게 사용해야 하며 나중에 반복적으로 사용할 수 있도록 선택한 결과를 최대한 많이 캐시해야 합니다.

예를 들어 다음 작성 방법은 나쁜 작성 방법입니다:

jQuery('#top').find('p.classA');
jQuery('#top').find('p.classB');
로그인 후 복사

더 좋은 작성 방법은:

var cached = jQuery('#top');
  cached.find('p.classA');
  cached.find('p.classB');
로그인 후 복사

테스트에 따르면 캐싱이 캐싱을 하지 않는 것보다 2~3배 빠릅니다

jQuery의 주요 기능 체인 쓰기 방식을 사용할 수 있다는 것입니다

$('p').find('h3').eq(2).html('Hello');
로그인 후 복사

체인 쓰기 방법을 사용할 때 jQuery는 각 단계의 결과를 자동으로 캐시하므로 비체인 쓰기 방법보다 빠릅니다. 테스트에 따르면 체인 작성 방법은 비체인 작성 방법(캐싱 없음)보다 약 25% 빠릅니다

이벤트 위임

JavaScript의 이벤트 모델은 "버블" 모드, 즉 이벤트를 채택합니다. 하위 요소의 레벨은 레벨별로 "버블링"되어 상위 요소의 이벤트가 됩니다.

이를 사용하면 이벤트 바인딩이 크게 단순화될 수 있습니다. 예를 들어, 100개의 셀(td 요소)이 포함된 테이블(table 요소)이 있는데 이제 각 셀에 클릭 이벤트(click)를 바인딩해야 합니까?

$("td").on("click", function(){
    $(this).toggleClass("click");
  });
로그인 후 복사

답은 '아니오'입니다. 이 이벤트를 테이블 요소에만 바인딩하면 됩니다. td 요소에서 클릭 이벤트가 발생한 후 이벤트가 상위 요소 테이블에 "버블"되어 모니터링되기 때문입니다

因此,这个事件只需要在父元素绑定1次即可,而不需要在子元素上绑定100次,从而大大提高性能。这就叫事件的"委托处理",也就是子元素"委托"父元素处理这个事件

$("table").on("click", "td", function(){
    $(this).toggleClass("click");
  });
로그인 후 복사

更好的写法,则是把事件绑定在document对象上面

$(document).on("click", "td", function(){
    $(this).toggleClass("click");
  });
로그인 후 복사

如果要取消事件的绑定,就使用off()方法

$(document).off("click", "td");
로그인 후 복사

少改动DOM

1、改动DOM结构开销很大,因此不要频繁使用.append()、.insertBefore()和.insetAfter()这样的方法

如果要插入多个元素,就先把它们合并,然后再一次性插入。根据测试,合并插入比不合并插入,快了将近10倍

2、如果要对一个DOM元素进行大量处理,应该先用.detach()方法,把这个元素从DOM中取出来,处理完毕以后,再重新插回文档。根据测试,使用.detach()方法比不使用时,快了60%

3、如果要在DOM元素上储存数据,不要写成下面这样:

var elem = $('#elem');
elem.data(key,value);
로그인 후 복사

而要写成

var elem = $('#elem');
$.data(elem[0],key,value);
로그인 후 복사

根据测试,后一种写法要比前一种写法,快了将近10倍。因为elem.data()方法是定义在jQuery函数的prototype对象上面的,而$.data()方法是定义jQuery函数上面的,调用的时候不从复杂的jQuery对象上调用,所以速度快得多

4、插入html代码的时候,浏览器原生的innterHTML()方法比jQuery对象的html()更快

尽量少生成jQuery对象

每当使用一次选择器(比如$('#id')),就会生成一个jQuery对象。jQuery对象是一个很庞大的对象,带有很多属性和方法,会占用不少资源。所以,尽量少生成jQuery对象

举例来说,许多jQuery方法都有两个版本,一个是供jQuery对象使用的版本,另一个是供jQuery函数使用的版本。下面两个例子,都是取出一个元素的文本,使用的都是text()方法

既可以使用针对jQuery对象的版本:

var $text = $("#text");
var $ts = $text.text();
로그인 후 복사

也可以使用针对jQuery函数的版本:

var $text = $("#text");
var $ts = $.text($text);
로그인 후 복사

由于后一种针对jQuery函数的版本不通过jQuery对象操作,所以相对开销较小,速度比较快

选择作用域链最短的方法

严格地说,这一条原则对所有Javascript编程都适用,而不仅仅针对jQuery

我们知道,Javascript的变量采用链式作用域。读取变量的时候,先在当前作用域寻找该变量,如果找不到,就前往上一层的作用域寻找该变量。这样的设计,使得读取局部变量比读取全局变量快得多

请看下面两段代码,第一段代码是读取全局变量:

var a = 0;
  function x(){
    a += 1;
  }
로그인 후 복사

第二段代码是读取局部变量:

function y(){
    var a = 0;
    a += 1;
  }
로그인 후 복사

第二段代码读取变量a的时候,不用前往上一层作用域,所以要比第一段代码快五六倍

同理,在调用对象方法的时候,closure模式要比prototype模式更快

prototype模式:

var X = function(name){ this.name = name; }
X.prototype.get_name = function() { return this.name; };
로그인 후 복사

closure模式:

var Y = function(name) {
    var y = { name: name };
    return { 'get_name': function() { return y.name; } };
  };
로그인 후 복사

同样是get_name()方法,closure模式更快

使用Pub/Sub模式管理事件

当发生某个事件后,如果要连续执行多个操作,最好不要写成下面这样:

function doSomthing{
    doSomethingElse();
    doOneMoreThing();
  }
로그인 후 복사

而要改用事件触发的形式:

function doSomething{
    $.trigger("DO_SOMETHING_DONE");
  }
  $(document).on("DO_SOMETHING_DONE", function(){
    doSomethingElse(); 
  });
로그인 후 복사

还可以考虑使用deferred对象

function doSomething(){
    var dfd = new $.Deferred();
    //Do something async, then... 
    //dfd.resolve();
    return dfd.promise();
  }
  function doSomethingElse(){
    $.when(doSomething()).then(//The next thing);
  }
로그인 후 복사

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在微信小程序中如何使用switch开关选择器

在JavaScript中如何计算多边形质心

在Angular19中有关自定义表单控件使用

위 내용은 jQuery의 코드 최적화에 대한 자세한 지침의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

jQuery 참조 방법에 대한 자세한 설명: 빠른 시작 가이드 jQuery 참조 방법에 대한 자세한 설명: 빠른 시작 가이드 Feb 27, 2024 pm 06:45 PM

jQuery 참조 방법에 대한 자세한 설명: 빠른 시작 가이드 jQuery는 웹 사이트 개발에 널리 사용되는 JavaScript 라이브러리로, JavaScript 프로그래밍을 단순화하고 개발자에게 풍부한 기능을 제공합니다. 이 기사에서는 jQuery의 참조 방법을 자세히 소개하고 독자가 빠르게 시작할 수 있도록 구체적인 코드 예제를 제공합니다. jQuery 소개 먼저 HTML 파일에 jQuery 라이브러리를 도입해야 합니다. CDN 링크를 통해 소개하거나 다운로드할 수 있습니다.

jQuery에서 PUT 요청 방법을 사용하는 방법은 무엇입니까? jQuery에서 PUT 요청 방법을 사용하는 방법은 무엇입니까? Feb 28, 2024 pm 03:12 PM

jQuery에서 PUT 요청 방법을 사용하는 방법은 무엇입니까? jQuery에서 PUT 요청을 보내는 방법은 다른 유형의 요청을 보내는 것과 유사하지만 몇 가지 세부 사항과 매개 변수 설정에 주의해야 합니다. PUT 요청은 일반적으로 데이터베이스의 데이터 업데이트 또는 서버의 파일 업데이트와 같은 리소스를 업데이트하는 데 사용됩니다. 다음은 jQuery에서 PUT 요청 메소드를 사용하는 구체적인 코드 예제입니다. 먼저 jQuery 라이브러리 파일을 포함했는지 확인한 다음 $.ajax({u를 통해 PUT 요청을 보낼 수 있습니다.

jQuery 팁: 페이지에 있는 모든 태그의 텍스트를 빠르게 수정하세요. jQuery 팁: 페이지에 있는 모든 태그의 텍스트를 빠르게 수정하세요. Feb 28, 2024 pm 09:06 PM

제목: jQuery 팁: 페이지에 있는 모든 태그의 텍스트를 빠르게 수정하세요. 웹 개발에서는 페이지의 요소를 수정하고 조작해야 하는 경우가 많습니다. jQuery를 사용할 때 페이지에 있는 모든 태그의 텍스트 내용을 한 번에 수정해야 하는 경우가 있는데, 이는 시간과 에너지를 절약할 수 있습니다. 다음은 jQuery를 사용하여 페이지의 모든 태그 텍스트를 빠르게 수정하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 먼저 jQuery 라이브러리 파일을 도입하고 다음 코드가 페이지에 도입되었는지 확인해야 합니다. &lt

jQuery를 사용하여 모든 태그의 텍스트 내용 수정 jQuery를 사용하여 모든 태그의 텍스트 내용 수정 Feb 28, 2024 pm 05:42 PM

제목: jQuery를 사용하여 모든 태그의 텍스트 내용을 수정합니다. jQuery는 DOM 작업을 처리하는 데 널리 사용되는 인기 있는 JavaScript 라이브러리입니다. 웹 개발을 하다 보면 페이지에 있는 링크 태그(태그)의 텍스트 내용을 수정해야 하는 경우가 종종 있습니다. 이 기사에서는 jQuery를 사용하여 이 목표를 달성하는 방법을 설명하고 구체적인 코드 예제를 제공합니다. 먼저 페이지에 jQuery 라이브러리를 도입해야 합니다. HTML 파일에 다음 코드를 추가합니다.

jQuery를 사용하여 요소의 높이 속성을 제거하는 방법은 무엇입니까? jQuery를 사용하여 요소의 높이 속성을 제거하는 방법은 무엇입니까? Feb 28, 2024 am 08:39 AM

jQuery를 사용하여 요소의 높이 속성을 제거하는 방법은 무엇입니까? 프런트엔드 개발에서는 요소의 높이 속성을 조작해야 하는 경우가 종종 있습니다. 때로는 요소의 높이를 동적으로 변경해야 할 수도 있고 요소의 높이 속성을 제거해야 하는 경우도 있습니다. 이 기사에서는 jQuery를 사용하여 요소의 높이 속성을 제거하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. jQuery를 사용하여 높이 속성을 연산하기 전에 먼저 CSS의 높이 속성을 이해해야 합니다. height 속성은 요소의 높이를 설정하는 데 사용됩니다.

jQuery에서 eq의 역할 및 적용 시나리오 이해 jQuery에서 eq의 역할 및 적용 시나리오 이해 Feb 28, 2024 pm 01:15 PM

jQuery는 웹 페이지에서 DOM 조작 및 이벤트 처리를 처리하는 데 널리 사용되는 인기 있는 JavaScript 라이브러리입니다. jQuery에서 eq() 메서드는 지정된 인덱스 위치에서 요소를 선택하는 데 사용됩니다. 구체적인 사용 및 적용 시나리오는 다음과 같습니다. jQuery에서 eq() 메서드는 지정된 인덱스 위치에 있는 요소를 선택합니다. 인덱스 위치는 0부터 계산되기 시작합니다. 즉, 첫 번째 요소의 인덱스는 0이고 두 번째 요소의 인덱스는 1입니다. eq() 메소드의 구문은 다음과 같습니다: $("s

프로그램 성능 최적화를 위한 일반적인 방법은 무엇입니까? 프로그램 성능 최적화를 위한 일반적인 방법은 무엇입니까? May 09, 2024 am 09:57 AM

프로그램 성능 최적화 방법에는 다음이 포함됩니다. 알고리즘 최적화: 시간 복잡도가 낮은 알고리즘을 선택하고 루프 및 조건문을 줄입니다. 데이터 구조 선택: 조회 트리, 해시 테이블 등 데이터 액세스 패턴을 기반으로 적절한 데이터 구조를 선택합니다. 메모리 최적화: 불필요한 객체 생성을 피하고, 더 이상 사용하지 않는 메모리를 해제하고, 메모리 풀 기술을 사용합니다. 스레드 최적화: 병렬화할 수 있는 작업을 식별하고 스레드 동기화 메커니즘을 최적화합니다. 데이터베이스 최적화: 인덱스를 생성하여 데이터 검색 속도를 높이고, 쿼리 문을 최적화하고, 캐시 또는 NoSQL 데이터베이스를 사용하여 성능을 향상시킵니다.

jQuery를 사용하여 테이블에 새 행을 추가하는 방법 소개 jQuery를 사용하여 테이블에 새 행을 추가하는 방법 소개 Feb 29, 2024 am 08:12 AM

jQuery는 웹 개발에 널리 사용되는 인기 있는 JavaScript 라이브러리입니다. 웹 개발 중에 JavaScript를 통해 테이블에 새 행을 동적으로 추가해야 하는 경우가 많습니다. 이 기사에서는 jQuery를 사용하여 테이블에 새 행을 추가하는 방법을 소개하고 특정 코드 예제를 제공합니다. 먼저 HTML 페이지에 jQuery 라이브러리를 도입해야 합니다. jQuery 라이브러리는 다음 코드를 통해 태그에 도입될 수 있습니다.

See all articles