Кадр анимации запроса вызова каждые пять секунд

Если мне нужно постоянно получать новые данные, я знаю, что лучшим решением являются веб-сокеты. Таким образом, сервер будет уведомлять клиента о появлении новых данных. Но чтобы избежать этого только для одного сценария, мне нужно будет вызывать некоторый http-запрос каждые пять секунд.

Я использую здесь счетчик только для моделирования вместо вызова какой-либо службы http.

let counter = 0;
setInterval(() => {
  console.info(counter);
  ++counter;
},5000)

Я читал, что лучшим решением является requestAnimationFrame вместо setInterval. Он более оптимизирован браузером, а также, когда вкладка не активна, она приостанавливается. Установленный интервал продолжает срабатывать, и когда вкладка не активна, это нехорошо.

Как я могу вызывать какую-то функцию в requestAnimationFrame каждые пять секунд?

Поведение ключевого слова "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
0
461
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Чтобы на самом деле вызывать его каждые 5 секунд, вам все равно понадобится (по крайней мере) setTimeout. Но с этим будет работать что-то вроде следующего:

requestAnimationFrame(function run() {
    console.info('do something w/o initial delay');

    setTimeout(function () {
        console.info('do something w/ initial delay');

        requestAnimationFrame(run);
    }, 5000);
});

Спасибо Йоши за ваш ответ. Я принял ваш ответ, потому что он работает. Это единственный способ восстановить setTimeout?

pece 11.12.2020 12:26

@pece Более или менее. requestAnimationFrame не имеет функции синхронизации, потому что обычно вы хотите вызывать ее как можно чаще, чтобы обеспечить хороший fps (~ 60). Если это не ваша цель, вам нужно обойти это и вызывать только через определенные промежутки времени. Обратите внимание, что код работает, но я, вероятно, никогда не буду использовать requestAnimationFrame таким образом. Я бы придерживался простых setTimeouts. По совпадению вы можете заменить requestAnimationFrame на setTimeout в приведенном выше коде без каких-либо изменений в поведении.

Yoshi 11.12.2020 12:29

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