Определение и использование простоя в JavaScript

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для того чтобы отследить периоды пользовательской неактивности, возможно использовать таймер ожидания. Вашей задачей будет обнуление этого таймера при каждом действии пользователя. Вот наш пример реализации:

JS
Скопировать код
let idleTimer;
const resetIdleTimer = () => {
  clearTimeout(idleTimer);  // отменяем предыдущий таймер
  idleTimer = setTimeout(() => console.log('Пользователь отсутствует'), 5000); // запускаем отсчёт на 5 секунд
};
['mousemove', 'keypress'].forEach(event => document.addEventListener(event, resetIdleTimer)); // регистрируем события движения мыши и нажатия клавиш
resetIdleTimer(); // запускаем процесс обновления таймера

Таймер обратного отсчёта на 5 секунд является активным при любой активности со стороны пользователя. Если пользователь решает сделать перерыв, по истечении указанного времени setTimeout активируется и оповещает о его бездействии. Мы отслеживаем любые движения мышью или нажатия клавиш.

Кинга Идем в IT: пошаговый план для смены профессии

Возможности использования периодов бездействия

Определение периодов бездействия позволяет повысить значение времени, когда пользователь не проявляет активности, превращая его в полезный ресурс. Это может способствовать повышению пользовательского опыта и обеспечивать стабильную работу служб. Предлагаем несколько стратегий использования времени бездействия:

  1. Подгрузка контента: Загружаем значимые данные для пользователя во время его неактивности, обеспечивая таким образом бесперебойную работу приложения при его возвращении.

  2. Мониторинг загрузки страниц: Инициируем таймер бездействия при каждой загрузке страницы для получения точных данных об активности пользователя.

  3. Расширенное отслеживание событий: Следим за такими действиями пользователя, как scroll и click, в дополнение к mousemove и keypress.

  4. Управление ресурсоемкими задачами: Используем периоды бездействия для выполнения трудоемких процессов, оптимизируя таким образом использование CPU.

  5. Использование внешних библиотек: В случае невозможности разработки собственного решения, Idle.js придет на помощь.

JS
Скопировать код
window.addEventListener('scroll', resetIdleTimer, { capture: true, passive: true }); // ни одно действие скролл не пройдёт незамеченным!

Указанная выше опция фазы перехвата в addEventListener обеспечивает продвинутый контроль пользователя.

Визуализация

Визуализируйте механизм отслеживания периодов бездействия в JavaScript как счётные палочки. Каждое действие пользователя обновляет таймер:

JS
Скопировать код
let lastActivity = new Date().getTime(); // время последней активности
const TIMEOUT = 5 * 60 * 1000; // если активности не было слишком долго, пора действовать!

document.onmousemove = document.onkeypress = () => {
    lastActivity = new Date().getTime(); // обновляем время последней активности
    silenceCounters();
};

setInterval(() => {
    if (new Date().getTime() – lastActivity > TIMEOUT) {
        awakenCounters(); // время бездействия превысило пороговое значение
    }
}, 1000);

function awakenCounters() {
    console.log('🕰️ Динь-динь! Пользователь бездействует.'); // звонок о неактивности
}

function silenceCounters() {
    console.log('🕰️ Шшш... Пользователь активен.'); // уведомляем о активности
}

Усовершенствование стратегии определения бездействия

Стандартизация обработки событий

Для достижения единообразия поведения в различных браузерах можно использовать нативный JavaScript или jQuery. Важно создавать адаптивный код, который будет гибко работать с механизмами обработки событий различных браузеров.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Повышение эффективности подгруженного контента

Несмотря на заметную пользу подгрузки данных заранее, всегда стоит думать об экономии трафика! Разрабатывайте стратегию подгрузки с учётом пользовательского опыта и значимости данных.

Анализ доступности пользователя

При помощи API видимости страниц (Page Visibility API) вы имеете возможность оценить, насколько важна ваша вкладка для пользователя. Именно от этого зависит ваша стратегия взаимодействия.

В конечном итоге, определение периодов бездействия пользователя должно способствовать не только эффективному использованию ресурсов, но и усилению вовлеченности пользователя.

Полезные материалы

  1. Page Visibility API – Web APIs | MDN — источник знаний MDN для работы с определением видимости страниц в JavaScript.
  2. JavaScript Timing Events — основы использования setTimeout и setInterval для отслеживания бездействия.
  3. Планирование: setTimeout и setInterval — глубокие разборы работы таймерных событий в JavaScript.
  4. Обнаружение неактивных пользователей | CSS-Tricks — практические примеры работы с бездействующими пользователями.
  5. GitHub – soixantecircuits/idle-js — готовая для использования библиотека для обнаружения бездействия пользователей.
  6. Использование Page Visibility API | web.dev — все преимущества Page Visibility API собраны в одном месте.
  7. Idle Detection API — дополнительные возможности для API обнаружения бездействия от W3C.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой таймер используется для отслеживания периодов неактивности пользователя в JavaScript?
1 / 5