Web Offline

58
Web Offline Bruno Gama Catão

description

Descrição introdutória de uma arquitetura para o desenvolvimento de aplicações web com funcionalidades offline. Tecnologias envolvidas: HTML5, Javascript, Handlebards, etc.

Transcript of Web Offline

Page 1: Web Offline

Web OfflineBruno Gama Catão

Page 2: Web Offline

– Eu, quando meu cliente pediu isso !

“Hã ?!”

Page 3: Web Offline

Qual o Problema ?

Sistema da PCCG

70 delegacias com acesso à Internet

SEM software

Page 4: Web Offline

Requisitos do Sistema

Quero ter acesso ao software em todas as delegacias

Quero poder emitir relatórios em tempo real de qualquer local

Características “especiais”

Baixa qualificação dos usuários

Frequente instabilidade da conexão com a Internet

Page 5: Web Offline

Resumindo

Baixa Qualificação dos Usuários

Não dá para instalar aplicativos complicados

Acessar de qualquer lugar

Tem “cheiro” de Internet

Instabilidade da conexão

Ninguém costa de ouvir: “Desculpe senhor, mas o sistema está fora do ar"

Page 6: Web Offline

“Quero algo que esteja na Internet, mas que funcione quando a

Internet cair"

Page 7: Web Offline

Alternativas

Arquiteturas Cliente / Servidor:

Delphi, Java Webstart, Adobe AIR, WPF, …

Problema:

- Alô, é do TI ? Então, o programa não tá abrindo !

- Você fez alguma coisa diferente ?

- Não, só abri uma página dizendo que ganhei um ringtone …

Page 8: Web Offline
Page 9: Web Offline
Page 10: Web Offline

Por que HTML5 ?

HTML5 = HTML + CSS3 + JS

AppCache + Web Storage !!!

Não preciso instalar software no computador de ninguém !

Se a Internet não abrir chame o suporte e não o programador ;)

Page 11: Web Offline

AppCache + Web Storage

=

Page 12: Web Offline

Vantagens

Carregamento mais rápido

Suporta instabilidades de conexão

Bom para aplicativos móveis (o 3G não é tão bom assim)

Coleta de dados

Page 13: Web Offline

–Clarice Lispector

“Bora programar galera !”

Page 14: Web Offline

AppCache 1/2

HTMLManifesto

Browser

1 - Primeiro AcessoEu tenho um manifesto !

2 - Faz download

Cache —————

arquivo 1 arquivo 2

….

3 - Define4 - Faz download Cache Local

————— arquivo 1 arquivo 2

….

5 - Cria

WEB LOCAL

Page 15: Web Offline

AppCache 2/2

HTMLManifesto

Browser

1 - Outros AcessosEu tenho um manifesto !

Cache —————

arquivo 1 arquivo 2

….

Cache Local —————

arquivo 1 arquivo 2

….

3 - Acessa arquivos locais

WEB LOCAL

2 - Tem cache ?

NÃO HÁ COMUNICAÇÃO !

Page 16: Web Offline

Manifesto

CACHE MANIFEST!!/index.html!/imagens/logo.png!/javascript/script.js!/css/estilo.css

Page 17: Web Offline

HTML

<html manifest="minha_app.appcache">

HTMLManifesto

Eu tenho um manifesto !

Page 18: Web Offline

FIM

Page 19: Web Offline
Page 20: Web Offline

O que falta ?

Mime-type

Como atualizar o conteúdo ?

E a comunicação cliente / servidor ?

Posso ter dados mistos (online / offline) ?

E o banco de dados ?

Page 21: Web Offline

text/cache-manifest

Page 22: Web Offline

Mime-Type

No Apache, adicionar ao .htaccess

AddType text/cache-manifest .appcache!

Em Java, criar um filtro (próximo slide)

No IIS, Sei Lá !!!

Page 23: Web Offline
Page 24: Web Offline

Atualização de Conteúdo

O conteúdo é atualizado se a cache for invalidada

Coisas que NÃO invalidam a AppCache:

F5, Control F5, limpar a cache e limpar dados offline

Como invalidar a cache ?

Alterando o manifesto

Page miss (404 ou 500)

No Chrome: chrome://appcache-internals/

Page 25: Web Offline

Esqueci de Colocar um Arquivo no Manifesto

Page 26: Web Offline

F5

Page 27: Web Offline

– Dalai Lama

“Tudo tem que estar no manifesto”

Page 28: Web Offline

Atualização Controlada

Colocar um número de versão no manifesto ajuda ;)

# Versao 1.0!CACHE MANIFEST!!/index.html!/imagens/logo.png!/javascript/script.js!/css/estilo.css

Page 29: Web Offline

Dados Mistos

Seção Network

Recursos que estão na rede

Seção Fallback

Baixa da rede, mas se estiver offline usa esse arquivo

Page 30: Web Offline

Seção Network

CACHE MANIFEST!!/index.html!/imagens/logo.png!/javascript/script.js!/css/estilo.css!!NETWORK:!http://www.google-analytics.com/ga.js

Page 31: Web Offline

Seção Network ;)

CACHE MANIFEST!!/index.html!/imagens/logo.png!/javascript/script.js!/css/estilo.css!!NETWORK:!*

Page 32: Web Offline

Imagine o cenário …

Seu aplicativo tem usuários

Cada usuário tem sua fotografia

Como seu sistema se comportará offline ?

Você vai baixar todas as fotos ?

Teria que atualizar o manifesto para cada nova foto

Page 33: Web Offline

Online

Page 34: Web Offline

Offline

Page 35: Web Offline

Solução

Seção Fallback

Forneça uma foto padrão para quando estiver offline

Page 36: Web Offline

Seção Fallback

CACHE MANIFEST!!/index.html!/imagens/logo.png!/javascript/script.js!/css/estilo.css!!NETWORK:!*!!FALLBACK:!/img/avatares/ /img/avatar-generico.png

Page 37: Web Offline

Seção Fallback

Page 38: Web Offline

Comunicação Cliente / Servidor

Javascript !!!

REST

JSON

Inversão de arquitetura

Page 39: Web Offline

Arquitetura Inversa

Normalmente

Lógica no servidor

Cliente possui lógica apenas de apresentação

Porém, precisamos de uma arquitetura inversa

Por quê ?

Page 40: Web Offline

JavaScript

Aprendam !

Javascript != Java

Linguagem Funcional

WEB => JavaScript

node.js => Javascript server-side !

Vale a pena olhar …

Page 41: Web Offline

E o Banco de Dados

Web Storage

Session Storage

Local Storage

temporário

permanente (5 a 10mb por página)

Page 42: Web Offline

PouchDB

Dupla Dinâmica:

PouchDB + CouchDB

var db = new PouchDB('dbname'); ! db.put({ _id: '[email protected]', name: 'David', age: 67 }); ! db.changes().on('change', function() { console.log('Ch-Ch-Changes'); }); ! db.replicate.to('http://example.com/mydb');

Page 43: Web Offline

Bibliotecas

require.js - http://requirejs.org

jquery - http://jquery.com

handlebars - http://handlebarsjs.com

Page 44: Web Offline

require.js

Page 45: Web Offline

jQuery

Uniformização

Busca de elementos por seletores CSS

Suporte a plugins

Ex:

$(‘a’).hide( ); // Esconde todos os links

$(‘h1’).css(‘color’, ‘red’); // Todos os títulos ficam vermelho

Page 46: Web Offline

Handlebars

Templating Engine (ex: JSP, ASP, PHP, …)

Facilita a produção de texto (normalmente HTML)

TEMPLATE DADOS String+ =

Normalmente HTML

Page 47: Web Offline

PROBLEMAS

Page 48: Web Offline

Problemas

Cache-control:!no-store

Page 49: Web Offline

Problemas

Muito inovador

Falta de frameworks

Falta de ferramentas

Page 50: Web Offline

Vantagens

Muito inovador

Acelera muito a velocidade do acesso

Diminui bastante o processamento no servidor

Aumenta as possibilidades de interação com o aplicativo

Page 51: Web Offline

Resultados

Page 52: Web Offline
Page 53: Web Offline
Page 54: Web Offline
Page 55: Web Offline

docx gerado 100% em JavaScript !

DocxGenJS https://github.com/edi9999/docxtemplater

Page 56: Web Offline

Perguntas ?

Page 57: Web Offline

Referências

Sérgio Lopes - http://sergiolopes.org/palestra-appcache-html5-offline

W3Schools - http://www.w3schools.com/html/html5_app_cache.asp

Zeno Rocha - http://zenorocha.com/html5-local-storage/

Page 58: Web Offline