Прогрессивные веб-приложения PWA позволяют ExtJS разработчикам расширить возможности приложения. С использованием PWA появляются две основные возможности, это кеширование AJAX запросов (посредством web workers , как следствие улучшается возможность offile работы приложения) и возможность добавлять ярлык приложения на Home Screen мобильного устройства, остальные плюсы можно почитать тут. В этой статье мы расскажем вам :
- Что необходимо для создания PWA с помощью ExtJS
- Требования к PWA приложениям
- Кеширование AJAX запросов
- Управление конфигурацией стратегии кеширования
Создание PWA приложения
Для добавления PWA к приложению ExtJS необходимо определить progressive manifest в app.json приложения.
"progressive": { "manifest": { "name": "Progressive App", "short_name": "PWA", "icons": [ { "src": "resources/pwa96.png", "sizes": "96x96" }, { "src": "resources/pwa192.png", "sizes": "192x192" }, { "src": "resources/pwa256.png", "sizes": "256x256" } ], "theme_color": "#054059", "background_color": "#054059", "display": "standalone", "orientation": "portrait", "start_url": "/index.html" } }
Так же рекомендуется включить loader caching для js скриптов, css файлов и изображений, для этого в app.json необходимо внести изменения
"loader": { "cache": true, "cacheParam": "_dc" }, "production": { ..., "loader": { "cache": true }, ... }
Требования к PWA приложениям
Работа с сервером посредством AJAX запросов разрешается только через https транспорт.
Для сборки необходимо:
- NodeJS 6+
- Cmd >= 6.5
- ExtJS >= 6.x
На стороне клиента необходимо
- Google Chrome Browser 56+
- Android 5.0+
Поддержка Egde обещана в будущем (на момент написания статьи) . Для Safari уже есть поддержка в beta версиях, подробнее тут.
Кеширование AJAX запросов
Для включения кеширования необходимо добавить соответствующий хинт к используемому proxy.
Ext.define('PWA.store.Personnel', { extend: 'Ext.data.Store', alias: 'store.personnel', fields: [ 'name', 'email', 'phone' ], autoLoad: true, proxy: { // @sw-cache url: 'resources/personnel.json', type: 'ajax', reader: { type: 'json', rootProperty: 'items' } } });
Управление конфигурацией @sw-cache
Для более сложных случаев рассмотрим пример
Ext.define('App.model.Event', { extend: 'Ext.data.Model', fields: ['id', 'name', 'date'], proxy: { type: 'rest', // @sw-cache { urlPattern: "\\/api\\/events\\/\\d+", options: { cache: { name: 'events', maxEntries: 10 }}} url : '/events' } });
Далее необходимо сконфигурировать web worker в соответствующей секции progressive manifest .
"progressive": { "serviceWorker": { "runtimeCaching": [ { "urlPattern": "\\/api\\/events" }, { "urlPattern": "\\/api\\/events\\/\d+", "options": { "cache": { "name": "events", "maxEntries": 10 } } } ] } }
О дополнительных конфигурациях @sw-cache рекомендуется ознакомиться тут.
PS
Помните что Web serive workers работают только в production сборках. Скачать пример PWA приложения можно тут.