bind
часто лучше по производительности, чем delegate
. Делегат предназначен для использования, когда содержимое корневого элемента может измениться.
РЕДАКТИРОВАТЬ: ** приведенный ниже код на самом деле менее оптимизирован после испытаний (на удивление). **
Чтобы оптимизировать ваш пример, вы можете сделать это:
var toolbar = $(".toolbar");
$(".add", toolbar).click() {
// Add stuff here
}
$(".remove", toolbar).click() {
// Remove stuff here
}
$(".clear", toolbar).click() {
// Clear stuff here
}
Это приводит к тому же результату, но вы ищите $ (". Панель инструментов") только один раз!
Однако в jQuery есть система для кэширования некоторых результатов. Так что я не знаю, действительно ли это оптимизировать.
РЕДАКТИРОВАТЬ2:
после тестирования в Firebug:
console.time("first");
console.log($("div span"));
console.log($("div a"));
console.log($("div p"));
console.timeEnd("first");
и:
console.time("second");
var div = $("div");
console.log($("span", div));
console.log($("a", div));
console.log($("p", div));
console.timeEnd("second");
Я получаю:
- сначала: 111мс
- секунда: 1323 мс
Итак, похоже, что предложенная мною альтернатива может привести к обратному результату.