Понимание веб-воркеров в браузере и изучение того, как вызывать API в фоновом режиме, не влияя на потоки пользователей с помощью JavaScript.

Здравствуйте, разработчики 👋,
В этом посте мы рассказали, чем полезны веб-воркеры, и обсудили некоторые примеры из реальной жизни.

В последние годы веб-приложения становятся все более сложными, и к ним добавляется все больше и больше функциональных возможностей. В результате производительность и скорость отклика стали серьезной проблемой для веб-разработчиков. Одним из решений этой проблемы является использование Web Workers.

👉 Что такое веб-воркеры

Веб-воркеры — это JavaScript API, который позволяет разработчикам запускать сценарии в фоновом режиме веб-страницы, не блокируя пользовательский интерфейс.

Это означает, что длительные задачи, такие как вызов API или выполнение сложных вычислений, могут выполняться в фоновом режиме, не влияя на производительность веб-страницы.

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

Этот поток полностью отделен от основного потока, который отвечает за отрисовку веб-страницы и реагирование на вводимые пользователем данные.

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

👉 Преимущества использования веб-воркеров

Использование Web Workers в веб-приложениях может дать несколько преимуществ, в том числе:

  • Улучшенная производительность.
    Запуская длительные задачи в фоновом режиме, Web Workers может повысить производительность веб-приложений. Это связано с тем, что основной поток не блокируется длительной задачей, что позволяет ему продолжать отображать веб-страницу и реагировать на ввод пользователя.
  • Улучшенная скорость отклика
    Web Workers также может повысить скорость отклика веб-приложений. Благодаря запуску задач в фоновом режиме пользовательский интерфейс остается отзывчивым, даже когда приложение выполняет длительные задачи.
  • Улучшение взаимодействия с пользователем
    Повышая производительность и скорость отклика, Web Workers может улучшить взаимодействие с пользователем для веб-приложений. Пользователи с большей вероятностью будут продолжать использовать быстрое и отзывчивое приложение, а не медленное и неотзывчивое.

👉 Вызов асинхронного API в фоновом режиме браузера

Давайте разберемся на примере.

Шаг 1. Создание Web Worker
Чтобы создать Web Worker, нам нужно создать новый файл JavaScript, который будет содержать код, который мы хотим запускать в фоновом режиме.

В этом примере мы создадим файл с именем worker.js.

self.onmessage = function(event) {
  // Retrieve the data from the event
  const requestData = event.data;

  // Perform the asynchronous API call
  performAPICall(requestData)
    .then(responseData => {
      // Send the response data back to the main thread
      self.postMessage(responseData);
    })
    .catch(error => {
      // Handle any errors that occur during the API call
      console.error('Error:', error);
    });
};

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

Шаг 2. Создание вызова API
Далее нам нужно создать код, который будет выполнять вызов API.

В этом примере мы будем использовать функцию performAPICall() для вызова конечной точки API с помощью fetch().

function performAPICall() {
  // Create a new Promise to encapsulate the asynchronous API call
  return new Promise((resolve, reject) => {
    // Perform the API call using fetch or any other suitable method
    fetch('https://jsonplaceholder.typicode.com/posts/', {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      },
    })
      .then(response => {
        if (response.ok) {
          // Resolve the Promise with the response data
          resolve(response.json());
        } else {
          // Reject the Promise with an error message
          reject('API call failed with status: ' + response.status);
        }
      })
      .catch(error => {
        // Reject the Promise with any error that occurs during the API call
        reject(error);
      });
  });
}

Примечание: в этом примере я использую JSONPlaceHolder API для целей тестирования.

Шаг 3. Создание основного потока
Теперь, когда мы создали Web Worker и вызов API, нам нужно создать основной поток, который будет взаимодействовать с Web Worker.

В этом примере давайте создадим файл app.js

// Create a new web worker
const worker = new Worker('worker.js');

// Send the data to the web worker
worker.postMessage('API Call');

// Listen for messages from the web worker
worker.onmessage = function (event) {
  // Retrieve the response data from the event
  const responseData = event.data;

  // Process the response data
  processResponse(responseData);
  console.log("Response Arrived", responseData);
};

function processResponse(responseData) {
  // Handle and process the response data from the API call
  let ulElem = document.getElementById("listing");
  ulElem.innerHTML = '';
  for (let i = 0; i < 10; i++) {
    let elem = `<li>${responseData[i].title}</li>`
    ulElem.innerHTML += elem;
  }
}

Мы используем функцию postMessage() для отправки сообщения Web Worker, который запустит вызов API.

В этом коде мы создаем новый экземпляр Web Worker и определяем функцию с именем onmessage, которая будет вызываться, когда Web Worker отправляет сообщение обратно в основной поток.

функция processResponse(responseData) — это функция, которая обрабатывает данные ответа и помогает отображать их в виде списка. (Вспомогательная функция)

Шаг 4. Запуск кода
Чтобы запустить код, нам нужно создать файл HTML, включающий файл main.js.

<!DOCTYPE html>
<html>

<head>
  <title>Web Worker Example</title>
</head>

<body>
  <script src="app.js"></script>
</body>

</html>

Когда мы откроем этот HTML-файл в веб-браузере, Web Worker начнет выполнять вызов API в фоновом режиме. Как только вызов API завершится, Web Worker отправит ответ обратно в основной поток, где мы сможем обработать данные по мере необходимости.

Вы также можете проверить вкладку Сеть. (Осмотрите элемент F12 -> Сеть)

👉 Реальные примеры веб-воркеров

Web Workers можно использовать в различных приложениях, в том числе:

  • Игры
    Web Workers можно использовать в веб-играх для выполнения сложных вычислений, таких как физическое моделирование или алгоритмы искусственного интеллекта. Выполняя эти вычисления в фоновом режиме, игра может оставаться отзывчивой даже при выполнении сложных задач.
  • Обработка видео и аудио
    Web Workers можно использовать в приложениях, обрабатывающих видео или аудиоданные, таких как программное обеспечение для редактирования видео или инструменты для обработки звука. Выполняя эти задачи в фоновом режиме, приложение может оставаться отзывчивым даже при обработке больших объемов данных.
  • Визуализация данных
    Web Workers можно использовать в приложениях, выполняющих визуализацию данных, таких как диаграммы или графики. Выполняя эти задачи в фоновом режиме, приложение может оставаться отзывчивым даже при обработке больших объемов данных.

Заключение

Web Workers — это мощный инструмент для повышения производительности и скорости отклика веб-приложений.

Запуская длительные задачи в фоновом режиме, Web Workers может улучшить взаимодействие с пользователем и сделать веб-приложения более приятными в использовании.

Хотя Web Workers могут подходить не для всех приложений, они являются ценным инструментом для разработчиков, стремящихся повысить производительность и скорость отклика своих веб-приложений.

Спасибо за прочтение 🙏😇

Свяжитесь со мной





Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .