Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Service Workers e o futuro das aplicações no se...

Service Workers e o futuro das aplicações no seu browser

Estratégias de cache das aplicações web hoje, são extremamente complicadas e impossíveis de se controlar via programação. ServiceWorkers, além de resolver esse problema, chega com features novas como interceptação de requests, sincronização em background e Push API.

Eduardo Matos

November 14, 2015
Tweet

More Decks by Eduardo Matos

Other Decks in Programming

Transcript

  1. REGRAS COMUNS DE UM WORKER • Não acessa o DOM

    • Não acessa o window • Não acessa o document • Acessa o navigator • Acessa o location (ready-only)
  2. SERVICE WORKER • Usa o mesmo conceito do WebWorker de

    isolar execução de um script • Controla programaticamente o cache da sua aplicação • Serve como um proxy da sua aplicação
  3. CACHE MANIFEST # Versão 1.0 # Sempre definimos versão ou

    uma - logo abaixo vou explicar o porquê # aqui vão arquivos/caminhos a serem cacheados CACHE /main/home /main/app.js # aqui vão arquivos/caminhos que sempre "buscarão" a rede NETWORK /files/download/1 /files/download/2 arquivo manifest.appcache
  4. PROBLEMAS… • arquivos com parâmetros (querystrings) são considerados recursos diferentes;

    • o html com o atributo manifesto sempre será cacheado; • você precisa declarar TODOS os recursos do site pra que o offline funcione - uma alternativa é usar no NETWORK o * pra que ele considere tudo o que não foi listado dentro de CACHE ou FALLBACK como recurso disponível online; • pra mudar algum asset que foi atualizado no servidor, você precisa gerar um novo manifesto com algum item de controle no topo do arquivo (como por exemplo uma data ou uma version - como eu fiz no exemplo anterior); • se há alterações, o usuário precisa atualizar a página pra recebê-las; • nada é controlado por API, tudo fica no arquivo; • não dá pra atualizar UM arquivo. Se mudar o manifesto TUDO vai ser baixado de novo; • se algo do FALLBACK fôr carregado online, sempre esse recurso será carregado online.
  5. // main.js if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw-test/sw.js', { scope:

    '/sw-test/' }).then(function (reg) { console.log(‘Success!. Scope is ' + reg.scope); }).catch(function (error) { console.log(‘Ops: ' + error); }); };
  6. // /sw-test/sw.js this.addEventListener('install', function (event) { event.waitUntil( caches.open('v1').then(function (cache) {

    return cache.addAll([ '/sw-test/', '/sw-test/index.html', '/sw-test/style.css', '/sw-test/app.js' ]); }) ); });
  7. PORQUE ESSE HYPE TODO? • JavaScript chegando no app nativo

    • Evolução e maior controle das aplicações • Acesso a funcionalidades do sistema do usuário (bluetooth, push notifications...)