Как стать автором
Обновить

Комментарии 32

А ведь можно же предлагать подписку на второй или третий заход пользователя на сайт, когда уже понятно, что он тут не случайно.

Золотые слова.
Действительно не понятно зачем на каждом сайте эти уведомления, особенно раздражает когда еще даже контент не загрузился, а уже «Хотите получать уведомления с ......com».
Блин, да еще не успел понять, что есть полезного на этом сайте.
Что-то я походу не понимаю, с каких пор обработчка запросов на клиенте стала революцией? Я не сильно опытный разработчик, но знаю что Angular или React позволяет делать достаточно большое колличество вещей на клиенте, так в чем тогда отличие PWA от обычного фреймворка? Название?
Вы не так всё поняли. PWA это не библиотека, это очередной костыль при попытке наделить сайты функциональностью приближающейся к нейтивным приложениям. Тоесть если нужен offline-mode, web-push, и еще несколько приятных фич — вам к PWA, и не важно, используете Вы Angular, React или даже жквери.

Можно ли держать потяжелее файлы в PWA, чем пару JS файлов и HTML?


Скажем пару гигабайт музыки

Наверно можно. Но тут все зависит от вашей этики. Позволит ли вам ваша совесть засрать своей музыкой пару гигабайт клиентской памяти?

Да нет, я думал можно ли написать музыкальный плеер на PWA. Кажется пока нет :)

почему нет? если не ошибаюсь — под андроид получится — там можно примишены задать для доступа к файловой системе. На IOS однозначно нет и 50 Мб ограничение и доступа к файловой системе хер получишь.
А вот тут не понял, от слова «совсем». Хранить плейлист в кэше?

Не так давно я мониторил место на диске и обнаружил 4гб папку в профиле хрома — indexeddb от my.mail.ru. При этом я даж хз когда я туда заходил.

Зависит от браузера. Addy Osmani пишет про такие лимиты:
Firefox: no limits, but will prompt after 50MB data stored
Mobile Safari: 50MB max
Desktop Safari: unlimited (prompts after 5MB)
IE10+ maxes at 250MB and prompts at 10MB
Это для десктопных браузеров. У мобилок, насколько я понимаю, считается по проценту свободной памяти.
Limitations compared with native iOS apps
The app can store offline data and files only up to 50 Mb
What PWAs can do on Android and not on iOS
On Android you can store more than 50 Mb
PWA IOS
Chrome <6% of free space
Firefox <10% of free space
Safari <50MB
IE10 <250MB
Edge Dependent on volume size

На 02.07.2018
Подскажите как обновить кеш файлов программно? Например вышла новая версия аппа, но из-за сервис воркеров даже при очистке Кеша показывает старую версию
Если коротко, то скажите SW сначала обращаться на сервер, а потом уже в кэш, и тогда проблема по идее должна решиться.
Если долго и самостоятельно, то: developers.google.com/web/fundamentals/instant-and-offline/offline-cookbook
Если ещё чуть дольше, но с чужой помощью и примерами, то: stackoverflow.com/search?q=service+worker+update

UPD: от автора этой самой статьи чуть более ранний материал по теме: habr.com/post/358060
Просто меняете название кэша в sw.js — тогда всё начнет записываться в новый кэш, старый останется (можно удалить явно). Это стандартный вариант от Гугла.
Или более интеллектуальные варианты — как по ссылке выше.

Это если у вас кэш SW. Но не надо забывать и про кэш браузера — старые ресурсы могут браться оттуда, для программера эти два независимых кэша часто головную боль доставляют. Я, чтобы не мучиться, кэш браузера для SW приложений просто отключаю (HTTP заголовками ответа сервера, в .htaccess).
Удалите Cache в Chrome DevTools -> Application. Если приложение не обновилось, то это файлы из кэша браузера. Это также видно во вкладке Network — источник ресурсов.
Эмм… а разве CacheStorage не юзает тот же самый браузерный кэш, просто предоставляя API? Где-то читал что это суть одно.
Нет, конечно
Сервис воркер каждый раз сравнивается побайтово. Если есть различия, вызывается событие activate. Так что просто меняете номер версии и все.
var version = 3,
  oldAppShell = 'appShell-'+(version-1),
  appShell = 'appShell-'+version;

self.addEventListener('activate', function(e) {
  e.waitUntil(
    caches.delete(oldAppShell).open(appShell).then(function(cache) {
      return cache.addAll(appShell);
    }).catch(function(err){console.log(err);})
  );
});
Из личного опыта можно вспомнить, как после перевода одного новостного сайта на работу с Service Worker, было решено отказаться от Андроид приложения, сделанного по функционалу сайта. И не столько потому, что его поддержка занимала человеческие ресурсы, а потому, что PWA версия, как ни удивительно, была быстрее, красивее и удобнее в работе, чем java приложение.


А с этого места можно поподробнее? Можно и в личку :) Мы бы про такой кейс с огромным удовольствием всем рассказали.
Developers_Relations FYI
Во второй части постараюсь именно эту практику изложить, как время будет.
А не в курсе, как оно (PWA) работает с keybord events? Т.е. по сути: можно ли на PWA написать приложение которое сможет реагировать как нативное на ovveride onKeyDown? (цель — подкючить сканер ШК, который в андроиде определяется как хардварная клава).
Также как обычная HTML-Javascript-CSS страница. Всё, что можно одному, можно и другому. Возможно Google будет давать PWA дополнительные разрешения со временем.
У service worker'а нет доступа к DOM. Он может только отвечать на сообщения из основного потока. В нем ловим event, пушим сообщение и данные в воркер, он обрабатывает и возвращает данные.
На самом деле у PWA будет намного больше разрешений. Google забросила свои Chrome Apps ради PWA, и разрешений у этих приложений будет немало, подобно Chrome Apps
https://developer.chrome.com/apps/declare_permissions
Дополню раз такая пьянка whatwebcando.today
В тексте статьи эта ссылка есть)
Тяжко помнить всё )
Статья, для ликбеза отличная. Спасибо за материал, и правда вдохновляет и мотивирует развивать идею PWA. Не понятно только, где автор так нагрешил? :-)
Всё очень просто — политические взгляды автора статьи не совпадают с политическими взглядами администрации ресурса и их приближенных.
И слава Богу — уход с Хабра высвобождает кучу времени на более полезные вещи.
XXX версия, как ни удивительно, была быстрее, красивее и удобнее в работе, чем java приложение.


Где-то это я уже слышал.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.