Какая из этих процедур менее ресурсозатратна?
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.
Пример тестов, подтверждающих рассуждения выше.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости