Какая из этих процедур менее ресурсозатратна?
var content = $('.kb-content');
content.each(function () {
if ($(this).data('parent-id') === targetId) {
$(this).toggleClass('hidden');
}
});
или
$('.kb-content[data-parent-id="' + targetId +'"]').toggleClass('hidden');
jQuery для выборки элементов использует библиотеку Sizzle. Эта библиотека разбирает переданную строку и для простых случаев использует стандартные функции get*By*, либо, в случае поддержки использует querySelectorAll.
Можно рассмотреть, что именно происходит в первом и втором случаях.
Первый случай:
$('.kb-content'); - выборка всех элементов с классом kb-contentcontent.each(function () { - проход по каждому элементуif ($(this).data('parent-id') === targetId) { - создание объекта jQuery, обращение к data, сравнение с параметром$(this).toggleClass('hidden'); - создание объекта jQuery, смена классаВторой случай:
$('.kb-content[data-parent-id="' + targetId +'"]') - выборка элементов с классом kb-content у которых атрибут data-parent-id - имеет соответствующее значение.toggleClass('hidden'); - проход по каждому элементу и смена классаМожно заметить как минимум два отличия:
Таким образом, если среди элементов с классом kb-content элементов с требуемым атрибутом будет сильно меньше, то вариант с выборкой по атрибуту будет выполняться быстрее, в силу того, что таких элементов будет меньше.
Также на скорость влияет множественное создание объектов jQuery.
Пример тестов, подтверждающих рассуждения выше.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости