2009-10-19 2 views
12

Каковы некоторые быстрые советы по увеличению производительности jQuery?Каковы некоторые быстрые советы по увеличению производительности jQuery?

+7

Покупка нового компьютера была бы очевидным способом :-) – Joey

+1

Думаю, вы найдете несколько дубликатов этого вопроса, используя поиск. –

+0

новый компьютер !! : D, предложите ему ОС: D –

ответ

19
  1. Предпочитают простой выбор первого только ID, и второй только по имя тега. Выбор по имени класса или селектору CSS требует, чтобы jQuery проходил DOM, а идентификатор и тег отображались в «родные» функции DOM браузера (getElementById и getElementByTagName).
  2. Кэш Ваши объекты jQuery как можно больше.
  3. Сфера применения операции с корневым объектом jQuery. Вместо того, чтобы выбирать элементы отдельно, выберите общий элемент предка и используйте функцию find, чтобы найти элементы в пределах области этих элементов. Это действительно оптимально, если вы все равно выполняете некоторые операции с общим предком; в противном случае накладные расходы на поиск предка и кэширование его могут перевесить выгоду от обхода области.
  4. Не используйте $.each(), использовать for(;;) вместо. Это более чем в десять раз быстрее.
+0

Это должен был быть принятый ответ. +1 – roosteronacid

+1

Можете ли вы привести пример для (;;)? – Vnuk

+2

Ниже приведена версия (.;) на основе одного из примеров для $ .each() из документации jQuery [http://docs.jquery.com/Utilities/jQuery.each]: for (var i = 0 ; i

8

Справочные файлы по google's CDN, поэтому они загружаются быстрее.

+0

Это не действительно производительность jQuery, не так ли? –

+0

Не применимо, если вы работаете в интрасети (пользователи находятся в одном здании). Хранение его на вашем собственном сервере спасло бы их поездку в Интернет. –

+0

@Nathan в интранете, это будет то, что нужно хранить на прокси-сервере, и так же сохранить их в поездке, но возьмите свою точку, а в некоторых местах не будет прокси – dove

7

Вместо того, чтобы делать:

$("#foo").addClass('test'); 
$("#foo").removeClass("bar"); 
$("#foo").slideUp('slow'); 

вы можете сделать:

$("#foo").addClass('test').removeClass('bar').slideUp('slow'); 
+0

Это действительно увеличивает производительность? Это так kewl. –

+3

Или если вы не можете сделать все сразу, поместите $ ("# foo") в переменную и используйте это, а не воссоздавая $ ("# foo") каждый раз. –

+2

@jpartogi: jQuery создает новый объект каждый раз, когда вы передаете селектор в $(), но поскольку его методы возвращают 'this', вы можете их складывать так. Трюк здесь заключается в том, чтобы не создавать три разных объекта для одного и того же селектора. –

2

Это не представляется возможным увеличить скорость JQuery, это действительно зависит от того, как эффективный код, насколько эффективен интерпретатор JS-браузера и насколько быстро работает компьютер Код -. Возможно, вы попытаетесь переписать jQuery, чтобы сделать его более эффективным, но это займет время, и это, скорее всего, уже довольно оптимизировано.

+1

Истинно, если вы смотрите на резкие улучшения скорости. Тем не менее, есть простые трюки, которые делают для лучшего исполнения, даже если его 100 или около того миллисекунд. –

2

Один из лучших способов обеспечения эффективности - убедиться, что * селектор нацелен на элемент/класс и так далее, насколько это возможно.

* $ (Селектор)

3

это doeas применяется всегда к общему JavaScript: всегда кэш, кэш, кэш т.д .:

var $this = $(this); 
$this.css('width', parseInt($this.css('width')) + 20 + 'px'); 
2

знать, когда использовать обычный JavaScript вместо методов JQuery.

jQuery является дополнением к JS + DOM, а не полной заменой для него. Вам не нужно использовать jQuery для каждой строки кода, который вы пишете. Некоторые вещи более кратко выражаются без него; многие вещи быстрее без него. Узнайте, что делает DOM, поэтому вы не можете написать некоторые из более глупых примеров, которые я видел здесь.

например .:

var ix= $('#'+selectname).children().index($('#'+selectname+' option:selected')); 

быстрее, легче читать, не порывать с неожиданными персонажами в ID:

var ix= document.getElementById(selectname).selectedIndex; 
+1

Это можно свести к: $ ('# someElement'). Find ('option: selected'); –

2

Я думаю, что вы просите оптимизации кода, но так как производительность сильно зависит от используемого JavaScript-Engine, я хотел бы упомянуть Google Chrome Frame.

Смежные вопросы