Начнем с того, что фреймворк JQuery очень быстрая штука. Да, конечно найдутся такие, кто скажет: "Короче, начал юзать джэйквери и у меня все повисло. Ну, я типа решил, что надо писать все самому...". Что ж, идиотов всегда хватало и мы не будем их переубеждать. Тем не менее, существуют некоторые практики и советы по использованию этого мощного (в руках homosapiens) инструмента.
Используйте ID, вместо классов для выборки элемента. Если у вас большой дом(не путать с дорогущим сооружением по соседству), то выборка $(.one-element') приведет к просмотру всего дерева для поиска этого элемента. Помогите ему и себе, предоставьте как можно больше информации о месторасположении объекта: ('.block1 > .block2 > .block3 …), укажите стартовую точку для поиска $('.foo', startObject) или используйте выборку по айдишнику $('#block45').
Читайте подробнее и на английском:
http://www.learningjquery.com/2006/12/quick-tip-optimizing-dom-traversal
http://blog.multitweet.com/2007/09/13/jquery-performance/
http://www.componenthouse.com/article-19
https://www.adaptavist.com/display/%7Egfraser/2008/01/12/Some+quick+tips+for+jQuery+performance
Иногда filter работает быстрее, чем find.
Читайте подробнее и на английском:
http://groups.google.com/group/jquery-en/browse_thread/thread/533451087251c952/9bb31c108c089c4f
http://www.learningjquery.com/2006/12/how-to-get-anything-you-want-part-2
Естественно это зависит от браузера, но объединение нескольких строк в одну таким способом: string1 = string2 + string3 может работать медленнее, чем если бы вы создали массив строк, а затем сделали join. В редких случаях имеет смысл использовать и третье решение - конкатенацию строк.
Читайте подробнее и на английском:
http://www.nabble.com/document.write-and-DOm-creation---performance-optimization--td18390436s27240.html
http://www.sitepen.com/blog/2008/06/09/string-performance-getting-good-performance-from-internet-explorer/
Для тех, кто еще не в курсе - javascript это не многопоточный язык. Всю правду, с откровенными фотографиями и отпечатками пальцев можно найти здесь. Также рекомендую почитать о способах иммитации многопоточности в джаваскрипте. Все это означает только одно - пока вы добавляете новые элементы в дом, браузер не сможет их отобразить. Поэтому, стоит разбивать операции вставки новых элементов на небольшие группы, давая браузеру отрисовывать их в промежутках между вставками. Сделать это можно с помощью банального setTimeout.
Недавно открыл для себя, что iterators в джаваскрипте работают медленее, чем generators при больших объемах данных. Будьте бдительны, товарищи!
Старайтесь кэшировать элементы и их коллекции, где это только возможно
1: var myCachedObjects = $(".find-me");
2: var anotherObjects = myCachedObjects.filter(".another-object");
3: var favouriteObjects = myCachedObjects.filter(".favourite-object");
Ухх, за эти выходные мое javascript-мировоззрение перевернулось: xml парсится в четыре раза медленнее, чем json, if(isTrue) работает быстрее, чем if(isTrue == true) и многое другое. Не хочу превращать этот пост в энциклопедию, поэтому добро пожаловать в полезные ссылки.
Полезные ссылки
jQuery: Performance analysis of selectors
IE + JavaScript Performance Recommendations
Evaluate Low Level JavaScript Performance Characteristics
Some more JavaScript performance tips