Что в этом коде такого, что браузер заставляет перегреваться процессор?

Такие дела.
Использую библиотеку Snap для управлением SVG.

Имею такой код:
circle () {
        let it = this;

        // Создаем circle
        let circle = it.snap.circle(it.marginRight(), 90, 0);

        // Стили
        circle.attr({
            r: 2,
            fill: "rgba(135,205,45,0)",
            stroke: "#5da858",
            strokeWidth: 3
        });

        // Анимация радиуса и ширины border
        circle.animate({
            r: 800,
            strokeWidth: 10,
            opacity: 0.8
        }, 5000, mina.linear);

        // Анимация прозрачности
        setTimeout(() => {
            circle.animate({
                opacity: 0,
                strokeWidth: 1
            }, 1000, mina.linear);
        }, 4000);

        // Удаляем circle
        setTimeout(() => {
            circle.remove();
        }, 5100)
    }

Это метод класса. Я его вызываю по setInterval() каждую секунду, таким образом получаю расширяющиеся кольца, имитирующие волны.
И именно этот скрипт грузит весь сайт до лагов и перегрева макбука (кулер начинает работать через несколько секунд после открытия сайта, а разряжаться бук начинает со скоростью 1% в минуту).
Убрав этот скрипт я получил стабильный быстрый сайт.

Что здесь такого? Может где-то утечка памяти?
  • Вопрос задан
  • 431 просмотр
Пригласить эксперта
Ответы на вопрос 3
erniesto77
@erniesto77
oop, rb, py, php, js
видимо вложенные таймауты в анимации прозрачности
Ответ написан
Комментировать
@vshvydky
что-то мне говорит, что это беда circle.animate который уже задает тайм интервалы и оборачивается в интервалы, а дальше все наростает действиями.
Ответ написан
abyrkov
@abyrkov
JavaScripter
1. SVG - это "тяжелая" вещь
2. Готов предположить, что анимация не "приделывается" к requestAnimationFrame, вследствии чего получается двойная перерисовка DOM + пункт 1.
3. Системник - это вам не процессор :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы