Service Workers как причина некоторых тормозов

Со временем на любом компьютере или телефоне накапливается мусор, который сильно затормаживает систему. В интернетах есть куча статей как почистить кэши, какие программы удалить, и т.д. Самое эффективное, конечно, это сбросить всё к заводским настройкам и переустановить систему. Но это не наш вариант. Кроме разных кэшей есть ещё одно не очевидное место, где копится мусор, который может активно грузить систему – это ServiceWorker в браузере.

Краткое описание технологии
ServiceWorker это фоновые скрипты, которые могут запускаться даже при закрытых вкладках. Чаще всего они используются для показа Push-уведомлений и кэширования данных, чтобы ваш любимый сайт мог открыться и что-то показать, когда у вас нет интернета.

Технически это javascrіpt-файл, который устанавливается в специальное место браузера и остаётся там навсегда. Он может продолжать выполнять какие-то действия даже после закрытия вкладки. Еще хуже то, что, если вы случайно дали разрешение на показ уведомлений какому-то подозрительному сайту, то ваш браузер фактически может стать частью бот-нета, который может творить любую дичь без вашего ведома, например, майнить крипту, досить сайты, и тд.

В фоновом режиме сервисворкер может работать до 5 минут после последнего события, которое его пробудило:

Открытие сайта

Поступлении push-сообщения (требуется дать разрешение сайту на отправку уведомлений)

Периодическая фоновая синхронизация (но для этого нужно «установить» сайт на экран «домой»)

В чём опасность PUSH
В этой технологии есть 2 элемента. Это механизм доставки данных на устройство, называемый Push API, и методы отображения уведомления на устройстве – Notification API.

Слава разработчикам, Push API не работает без разрешения на Notification API. Но это означает, что, если вы дали разрешение на показ уведомлений, то ваше устройство будет принимать команды от сайта и выполнять какие-то действия. Действия могут быть разными, например: показать уведомление, загрузить в кэш свежие новости, помайнить крипту, задосить сайт и тд. При этом показывать какие-либо уведомления не обязательно.

Кроме того, однажды установленный сервисворкер остаётся в устройстве до тех пор, пока вы не удалите историю браузера (т.е. останется навсегда), а значит через год-два активного использования телефона количество установленных сервисворкеров может быть сотни и тысячи. И они однозначно будут влиять на общую производительность системы.

 

Итак,

Запретить показ уведомлений для всех сайтов:
Настройки – настройки сайтов – уведомления – запретить сайтам отправлять уведомления.

Там же почистить раздел «разрешено показывать уведомления» от неизвестных сайтов.

Периодически чистить сервисворкеры или отключать их:
для Chrome (windows и android):

Заходим по ссылке chrome://serviceworker-internals/ и ужасаемся количеству.

Упорно тыкаем на кнопку Unregister до тех пор, пока они не закончатся.

Для Safari (iphone и ipad):

Как простыми средствами посмотреть список установленных воркеров я найти не смог, но можно отключить навсегда эту заразу:

Настройки – Safari – Дополнения – Experimental Features – Service Workers – отключите галку

Для Safari на маках не подскажу – под рукой нет)

 

Результат проведения эксперимента на себе
Имеется дешманский андроид примерно 2019 года выпуска, постепенно из шустрого смартфона превращается в дико тормозной кирпич. Иногда подвисал секунд на 30. После удаления сервисворкеров субъективно подобных зависаний стало меньше.

1199 5
16 1
Login to post comments
Untimely gone@1633331307/15/2023, 6:52 pm

আনেক সুন্দর 

Untimely gone@1633361407/12/2023, 8:19 pm

Salom

Omid afrooz@16331592BANNED07/10/2023, 10:11 am

Salam

Евженя@10589507/10/2023, 7:34 am

раз 50 пришлось нажать на Unregister

Untimely gone@1633146207/10/2023, 4:31 am

Salam