Замена jQuery на for
-
20-09-2019 - |
Вопрос
Я уже некоторое время использую $.each для выполнения итераций, но продолжаю слышать, как люди говорят, что для выполнения циклов нужно использовать собственный JS.Меня очень беспокоит производительность, но я не уверен, что всегда можно осмысленно заменить $.each на for.
Итак, мои вопросы: можно ли всегда заменять $.each на for, и если нет, то какое практическое правило, когда это можно сделать, а когда нельзя.
У меня есть каждый такой:
$this.find("div.class").each(function (){
var $thisparent = $(this).parent();
if (condition) {
$(this).prepend($thisparent.text());
}
if (condition2) {
$(this).prepend($thisparent.text());
}
});
Решение
Это то, что делает jQuery .each
, по сути:
$.fn.each = function(callback) {
var i, length = this.length;
for(i = 0; i < length; ++i) {
callback.call(this[i]);
}
};
Поэтому нетрудно заменить «содержимое» вашей анонимной функции на callback.call
вызов.Только обязательно замените this
с временным объектом jQuery.
Преобразование предоставленного вами кода:
var foo = $this.find("div.class"),
fooLength = foo.length,
i,
$thisparent;
for (i = 0; i < fooLength; ++i) {
$thisparent = $(foo[i]).parent();
if (condition) {
$(foo[i]).prepend($thisparent.text());
}
if (condition2) {
$(foo[i]).prepend($thisparent.text());
}
}
Для дополнительной (потенциальной) скорости кэшируйте foo[i]
во временное.тоже и назначить $thisparent
только когда это необходимо.Если condition
и condition2
являются взаимоисключающими, используйте один if (condition || condition2)
.
Другие советы
Кто-то сравнил производительность for
и $.each
:
http://jquery-howto.blogspot.com/2009/06/javascript-for-loop-vs-jquery-each.html