Какая из этих процедур менее ресурсозатратна?
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-content
content.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
.
Пример тестов, подтверждающих рассуждения выше.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как на JavaScript подписать пользователя на уведомления FCM и получить Push-token для сохранения в БД?
Есть через ухо написанный сайт, намешанно в нем дофигаВ итоге при установке google analytics нифига не работает
Столкнулся с проблемой при сохранении текстового файла на гугл диск Есть кнопка
Имеется много стандартных решений show more на javascript, но все (или почти все) из них подразумевают статичную высоту и ширину скрываемого текстаКак...