SetInterval замедляет мой сайт

Я хочу знать, замедляет ли setInterval мой сайт или нет?

setInterval(function(){
    var uploadbtndiv = document.getElementById("imagesmaindiv");
    if (uploadbtndiv.childElementCount == 1) {
          document.getElementsByClassName("plusupload")[0].style.top = "17px";
    }else{
          document.getElementsByClassName("plusupload")[0].style.top = "-81px";
    }

}, 10);

что происходит если вы меняете интервал на 100 или вообще убираете интервал ... ваш сайт быстрее? вы, конечно, можете сделать код в интервале более эффективным

Jaromanda X 22.07.2018 10:40

Технически каждая операция замедляет работу вашего сайта. Читайте о циклах событий

Alex Ironside 22.07.2018 10:41

Вы должны выбирать каждый элемент однажды, а не каждый раз, когда выполняется интервал. Кроме того, минимальный точный "интервал" setInterval составляет 12 мс или 16 мс или что-то в этом роде. IIRC, я думаю, что 10 мс слишком мало

CertainPerformance 22.07.2018 10:41

если setInterval тормозит сайт. а скажите, почему setInterval создан инверторами javascript?

SchoolforDesign 22.07.2018 10:49

@JaromandaX - очень незначительно, если getElementsByClassName предоставляется браузером и не заполнен полифиллами. getElementById и getElementsByClassName являются быстрыми ослепительно (последний не должен создавать коллекцию каждый раз при вызове; он каждый раз возвращает одну и ту же коллекцию).

T.J. Crowder 22.07.2018 10:49

setInterval полезен, setInterval 100 раз в секунду с неэффективным кодом - это не то, что имел в виду Брендан Эйх

Jaromanda X 22.07.2018 10:50

но @TJCrowder getElementById нужно запускать только один раз, а поскольку getElementsByClassName - это живой список, его тоже нужно запускать только один раз, поэтому я придерживаюсь своего утверждения, что код в интервале может быть «более эффективным» (я не сказал значительно или даже немного быстрее: p)

Jaromanda X 22.07.2018 10:52

@JaromandaX - И я не говорил, что вы ошибались. Я указал, что это будет улучшение маргинальный.

T.J. Crowder 22.07.2018 10:54

честно - вы правы в своем ответе - setInterval, вероятно, в любом случае не лучшее решение для «проблемы» - если вы потенциально меняете макет с каждой итерацией, даже requestAnimationFrame будет лучше, чем интервал ( опять же, но не в этом случае)

Jaromanda X 22.07.2018 10:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
9
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

setInterval не замедляет работу вашего сайта. Неправильное использование может. В вашем коде вы планируете выполнение операции примерно каждые 10 мс. Это много. Даже эффективная операция (а ваша довольно эффективная, хотя могла бы быть и более высокая), выполняемая 100 раз в секунду, может сложиться.

Вероятно, вам не нужен setInterval в вашем примере. Кажется, вы хотите что-то изменить в зависимости от того, сколько элементов в imagesmaindiv. Я бы сделал это одним из трех способов:

  • Поместив этот if / else в код, который добавляет / удаляет элементы в / из imagesmaindiv
  • Используя CSS, но это зависит от структуры
  • Используя наблюдатель мутаций на imagesmaindiv, поэтому я выполняю работу только тогда, когда его содержимое изменяется, а не 100 раз в секунду

Другие вопросы по теме