Интересуетесь автономными веб-приложениями и тем, как достичь уровня производительности, близкого к нативным программам? Не ищите ничего, кроме обслуживающего персонала.
Сервисные работники — это сценарии, которые выполняются в фоновом режиме и предоставляют мощные возможности кэширования и другие функции современным веб-приложениям.
Эти функции обеспечивают удобство и удобство работы с собственными приложениями в веб-браузере.
Сервисные работники являются фундаментальным компонентом при создании прогрессивных веб-приложений (PWA).
Понимание сервисных работников
Сервисный работник – это разновидность Веб-работник JavaScript который работает в фоновом режиме, отдельно от основного потока JavaScript, поэтому не блокируется. Это означает, что это не вызывает задержек или прерываний пользовательского интерфейса приложения или взаимодействия пользователя с ним.
Сервисные работники действуют как прокси-серверы, находясь между веб-приложениями и сетью. Они могут перехватывать запросы и ответы, кэшировать ресурсы и обеспечивать автономную поддержку. Это помогает гарантировать, что веб-приложения будут работать более плавно и удобно, даже если пользователь не в сети.
Ключевые приложения для сервисных работников
Есть несколько приложений для сервисников. Они включают:
- PWA: Сервисные работники предоставляют большие возможности Progressive Web Apps. Они выполняют пользовательские сетевые запросы, push-уведомления, автономную поддержку и быструю загрузку.
- Кэширование: Работники службы могут хранить ресурсы приложения — изображения, код JavaScript и файлы CSS — в кэше браузера. Это позволяет браузеру извлекать их из своего кэша, а не получать их с удаленного сервера по сети. В результате контент загружается быстрее, что особенно полезно для пользователей с медленным или ненадежным подключением к Интернету.
- Фоновая синхронизация: Сервисные работники могут синхронизировать данные и выполнять другие фоновые задачи, даже если пользователь не взаимодействует активно с приложением или когда приложение не открыто в браузере.
Интеграция Service Workers в приложениях Next.js
Прежде чем углубиться в код, полезно понять, как работают сервисные работники. Есть два ключевых этапа использования сервис-воркеров: Регистрация и активация.
На первом этапе браузер регистрирует сервис-воркера. Вот простой пример:
const registerServiceWorker = async () => {
if ("serviceWorker"in navigator) {
registration = await navigator.serviceWorker.register("/sw.js");
}
};
registerServiceWorker();
Код сначала проверяет, поддерживает ли браузер сервис-воркеров, что делают все современные веб-браузеры. Если такая поддержка существует, происходит регистрация сервисного работника, расположенного по указанному пути к файлу.
На этапе активации вам необходимо установить и активировать сервис-воркер, прослушав установить и активировать события с использованием Слушатели событий JavaScript. Вот как вы можете этого добиться:
registration.addEventListener("install", () => {
console.log("Service worker installed");
});
registration.addEventListener("activate", () => {
console.log("Service worker activated");
});
Вы можете указать этот код сразу после процесса регистрации. Он должен запуститься сразу после успешного завершения процесса регистрации сервисного работника.
Вы можете найти код этого проекта в его GitHub хранилище.
Создайте проект Next.js
Чтобы начать, запустите эту команду, чтобы локально создать проект Next.js:
npx create-next-app next-project
Добавление сервисного работника в приложение Next.js включает в себя следующие шаги:
- Зарегистрируйте сервисного работника в среде глобальной области действия.
- Создайте файл JavaScript сервисного работника в общедоступном каталоге.
Добавление сервисного работника
Сначала зарегистрируйте сервис-воркера. Обновите src/pages/_app.js файл следующим образом. Включение кода в этот файл гарантирует, что работник службы зарегистрируется при загрузке приложения и получит доступ ко всем ресурсам приложения.
import { useEffect } from'react';
exportdefaultfunctionApp({ Component, pageProps }) {
useEffect(() => {
if ('serviceWorker'in navigator) {
navigator.serviceWorker
.register('/service-worker.js', { scope: '/' })
.then((registration) => {
console.log(
'Service worker registered successfully. Scope:',
registration.scope
);
})
.catch((error) => {
console.error('Service worker registration failed:', error);
});
}
}, []);
return<Component {...pageProps} />;
}
использованиеЭффект перехват срабатывает, когда компонент монтируется. Как и в предыдущем примере, код сначала проверяет, поддерживает ли браузер пользователя сервис-воркеры.
Если поддержка существует, она регистрирует сценарий сервисного работника, расположенный по указанному пути к файлу, и указывает его область действия как «/”. Это означает, что сервисный работник контролирует все ресурсы приложения. Если хотите, вы можете указать более детальную область действия, например: «/products”.
Если регистрация прошла успешно, регистрируется сообщение об успехе вместе с областью действия. Если в процессе регистрации произойдет ошибка, код отловит ее и зарегистрирует сообщение об ошибке.
Установите и активируйте Service Worker
Добавьте следующий код в новый файл: общественный/сервис-worker.js.
const installEvent = () => {
self.addEventListener('install', () => {
console.log('service worker installed!!!');
});
};installEvent();
const activateEvent = () => {
self.addEventListener('activate', () => {
console.log('service worker activated!!!');
});
};
activateEvent();
Чтобы проверить, успешно ли зарегистрирован, установлен и активирован сервис-воркер, запустите сервер разработки и откройте приложение в браузере.
npm run dev
Открыть Инструменты разработчика Chrome (или эквивалент вашего браузера) и перейдите к Приложение вкладка. Под Сервисные работники разделе вы должны увидеть зарегистрированного вами сервисного работника.
После успешной регистрации, установки и активации сервисного работника вы можете реализовать несколько функций, таких как кэширование, фоновая синхронизация или отправка push-уведомлений.
Кэширование ресурсов с помощью Service Workers
Кэширование ресурсов приложения на устройстве пользователя может повысить производительность, обеспечивая более быстрый доступ, особенно в ситуациях с ненадежным подключением к Интернету.
Чтобы кэшировать ресурсы приложения, включите следующий код в файл сервис-worker.js файл.
const cacheName = 'test-cache';
self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request).then((cachedResponse) => {
return cachedResponse || fetch(event.request).then((response) => {
return caches.open(cacheName).then((cache) => {
cache.put(event.request, response.clone());
return response;
});
});
})
);
});
Когда пользователь впервые обращается к домашней странице, этот код проверяет, есть ли в кеше кэшированный ответ на запрос. Если кэшированный ответ существует, служба возвращает его клиенту.
Если кэшированного ответа не существует, сервисный работник извлекает ресурс с сервера по сети. Он передает ответ клиенту и кэширует его для будущих запросов.
Чтобы просмотреть кэшированные ресурсы, откройте вкладку «Приложение» в инструментах разработчика. Под Кэш-хранилище разделе вы должны увидеть список кэшированных ресурсов. Вы также можете проверить Не в сети вариант под Сервисный работник раздел и перезагрузите страницу, чтобы имитировать работу в автономном режиме.
Теперь, когда вы посещаете домашнюю страницу, браузер будет обслуживать ресурсы, хранящиеся в кеше, вместо того, чтобы пытаться делать сетевые запросы для получения данных.
Использование Service Workers для повышения производительности
Сервисные работники — мощный инструмент для повышения производительности приложений Next.js. Они могут кэшировать ресурсы, перехватывать запросы и обеспечивать автономную поддержку, и все это может улучшить взаимодействие с пользователем.
Однако важно отметить, что сервис-воркеры также могут быть сложными в реализации и управлении. Важно тщательно рассмотреть потенциальные преимущества и недостатки сервисных работников, прежде чем использовать их.