SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Downloaden Sie, um offline zu lesen
Web Off-line
Desenvolvendo aplicações web com:
Application Cache e Storage
Guilherme Visi Siquinelli
Como assim?!
+
===
Web Off-line
Pra que !@)#* isso serve?
Application Cache e Web Storage
Application Cache
Benefícios
● Navegação off-line
● Velocidade
● Redução de carga do servidor
Application Cache
Diferente da API Storage que falaremos a
frente, o Application Cache armazena o
aplicativo em sí, todos os arquivos HTML,
CSS, JS, Imagens e etc exigidos para seu
funcionamento, e também diferente da cache
de navegador web normal, ele não é apagado
quando o usuário limpa o cache, eles são
instalados e permenecem ali até que eles
mesmos se desintalem ou o usuário os exclua.
Application Cache
Para instalar um aplicativo na cache, precisamos criar um
arquivo manifesto listando os URLs exigidos, e entáo
vincular a página HTML principal ao manifesto
configurando o atributo manifest da tag <html>
Application Cache
Um aplicativo web baixado pela primeira vez e
colocado na cache, qualquer carregamento
subsequente será feito a partir da cache. Então
todos os arquivos exigidos devem estar listados na
cache, caso contrário não serão carregados. Essa
política simula o estado off-line.
Em geral, aplicativos web mais complicados não
podem colocar na cache todos os recursos que
exigem, mas ainda podem usar a cache se tiverem
um manifesto mais complexo.
Application Cache
Manifestos complexos
Os arquivos manifesto tem uma sintaxe um pouco
mais complicada do que esse exemplo que
usamos, e existem outras duas maneiras de listar
recursos em um manifesto. Além da seção
"CACHE:" padrão, também temos as seções que
começam com os cabeçalhos "NETWORK:" e
"FALLBACK:"
Application Cache
NETWORK:
Esta seção especifica URLs que nunca devem ser
colocados na cache e sempre devem ser recuperados da
rede. Podemos usar prefixos de URL, cujo recurso comece
com o prefixo será carregado da rede, nesta seção
listamos scripts do lado do servidor, que usam linguagens
de backend, como PHP, Ruby, NodeJS, Java e etc... Se
estivermos off-line, evidentemente a tentativa de
carregamento vai falhar. Então vamos a seção FALLBACK.
Application Cache
FALLBACK:
Esse cabeçalho inclue dois URLs em cada linha, o
segundo URL é carregado e armazenado na cache, o
primeiro URL é um prefixo. Os URLs correspondentes a
este prefixo não serão colocados na cache, mas vão ser
carregados da rede, quando possível. Se a tentativa de
carregamento falhar, o recurso especificado pelo segundo
URL colocado na cache será usado em seu lugar.
Application Cache
Application Cache
Atualização da cache
Quando um aplicativo é carregado na cache, toda
requisição busca diretamente da cache, mesmo se
estivermos online, a verificação é feita de forma
assíncrona. Se uma mudança é encontrada o arquivo de
manifesto todos arquivos que ele faz referência são
baixados e reinstalados na cache.
Importante!
Note que o navegador não verifica se algum dos arquivos
da cache mudou, somente o manifesto!
Application Cache

Eventos
Application Cache
Application Cache
Eventos
Pense em um laço de repetição de eventos, que recebem
repetidamente informações para processar e disparar uma
função de resposta de acordo com o evento.
É bastante flexível e permite um sistema assíncrono.
Application Cache
Comunicação assíncrona
De forma simples, podemos dizer que uma comunicação é
assíncrona quando há mais de um canal enviando e
recebendo informações em tempos diferentes, ou seja, não
segue o workflow natural de um aplicativo.

Link de exemplo: http://nodejsreactions.tumblr.
com/post/60458066021/when-i-forget-that-async-doesnt-work-everywhere
Application Cache
Com a API Application Cache podemos usar 8
eventos disparados assincronamente para
monitoramento e tratamento da aplicação.

Vamos ver um pouquinho de cada um...
Application Cache
onchecking: sempre disparado primeiro, ele
verifica seu arquivo manifesto.
onnoupdate: é disparado se estivermos usando
a versão atualizada da aplicação.
Application Cache
ondownloading: se a aplicação ainda não
estiver na cache ou o manifesto for atualizado,
ele sinaliza o inicio do processo de download.
onprogress: disparado periodicamente durante
o processo de download, normalmente para
cada arquivo baixado.
Application Cache
oncached: é disparado na primeira vez que
uma aplicação é colocada na cache.
onupdateready: após detecção e download de
uma nova versão da aplicação, esse evento é
disparado.
Application Cache
onerror: disparado para erros no carregamento
do manifesto ou da aplicação em cache.
onobsolete: se o arquivo manifesto
referenciado no html não existe, esse evento é
disparado e a aplicação é removida da cache.
Application Cache
Outra alternativa é usar a propriedade status
do objeto applicationCache, ela retorna 6
valores possíveis:

Também vamos ver um pouco de cada um ...
Application Cache
UNCACHED ou 0: aplicação não referencia um
arquivo manifesto.
IDLE ou 1: manifesto verificado, está na cache
e atualizado.
Application Cache
CHECKING ou 2: o navegador está verificando
o arquivo de manifesto.
DOWNLOADING ou 3: o navegador está
baixando os arquivos listados no manifesto.
Application Cache
UPDATEREADY ou 4: nova versão baixada e
colocada na cache.
OBSOLETE ou 5: o manifesto não existe e a
cache será excluída.
Application Cache
O objeto applicationCache também define 2
métodos, o update() e o swapCache().

… Sim, vamos...
Tem alguém dormindo aí já?
Application Cache
O método update() atualiza e procura uma
nova versão do aplicativo, ou seja, ele força o
navegador passar pela mesma verificação do
manifesto, disparando os mesmos eventos que
um aplicativo carregado pela primeira vez.
Application Cache
O método swapCache() diz ao navegador que
pode descartar a cache antiga e atender a
qualquer pedido futuro a partir da nova cache,
isso não faz recarregar o aplicativo, HTML,
imagens e scripts continuam na versão antiga,
por isso seu uso tem que ser muito bem
planejado.
Application Cache
De forma simples, só faz sentido chamar o
método swapCache() quando a propriedade
status do objeto applicationCache retorna
UPDATEREADY ou OBSOLETE, em outros
casos dispara uma exceção.
Storage
LocalStorage e SessionStorage, ambos
propriedades do objeto Window que fazem
referência a um objeto Storage, um array
associativo persistente que mapeia chaves de
string em valores de string. A diferença entre
os dois tem a ver com vida útil e escopo, ou
seja, por quanto tempo os dados são salvos e
a quem estão acessíveis.
Storage
Com esta API podemos gravar dados
estruturados (objetos ou arrays), valores
primitivos, valores internos, como datas,
expressões regulares e até objetos File.
Storage
Os dados armazenados em localStorage são
permanentes, não expiram e continuam lá até
que um aplicativo web ou o navegador os
exclua. Ele tem como escopo a origem do
documento, definida por seu protocolo, nome
de host e porta.
Storage
Já os dados armazenados em sessionStorage
são perdidos quando a janela ou guia é
fechada permanentemente. O escopo apesar
de também ser definido pela origem do
documento, são separados pela janela ou guia,
cada guia grava seus dados em
sessionStorage separadamente.
Storage
Armazenamento
A API de armazenamento possui métodos para
manipulação dos dados, inclusive "get and set" para
atribuição e recuperação dos dados armazenados,
também "remove and clear", os nomes por sí são bem
sugestivos, então vamos passar para os exemplos no
próximo slide.
Storage
Aplication Cache & Storage
Conclusão
Com estas APIs podemos desenvolver aplicações web
simples e complexas que funcionam off-line, basta saber
trabalhá-las. Ou então até desenvolver um plugin jQuery
para facilitar seu uso e disponibilizar para a comunidade.
Pensem nisso...
Obrigado!
Aplication Cache & Storage
Referências bibliográficas
David Flanagan, JavaScript O guia definitivo, 6ª edição, Bookman 2013.
Diego Eis, Elcio Ferreira, HTML5 e CSS3 com farinha e pimenta, 1ª edição.
HTML5 Rocks, http://www.html5rocks.com/pt/features/offline 23/09/2013.

Weitere ähnliche Inhalte

Was ist angesagt?

Tomcat e Aplicações Web
Tomcat e Aplicações WebTomcat e Aplicações Web
Tomcat e Aplicações Webelliando dias
 
Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1Thyago Maia
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Helder da Rocha
 
Introdução ao Asp.NET MVC
Introdução ao Asp.NET MVCIntrodução ao Asp.NET MVC
Introdução ao Asp.NET MVCBenicio Ávila
 
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4Desenvolvimento de sistemas web com PHP Frameworks - Aula 4
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4Thyago Maia
 
ALM e Operações - Workshop - Como Diagnosticar um Incidente
ALM e Operações - Workshop - Como Diagnosticar um IncidenteALM e Operações - Workshop - Como Diagnosticar um Incidente
ALM e Operações - Workshop - Como Diagnosticar um IncidenteAlan Carlos
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsEduardo Mendes
 

Was ist angesagt? (14)

Tomcat e Aplicações Web
Tomcat e Aplicações WebTomcat e Aplicações Web
Tomcat e Aplicações Web
 
Maverick v1.0
Maverick v1.0Maverick v1.0
Maverick v1.0
 
Curso tomcat
Curso tomcatCurso tomcat
Curso tomcat
 
Laravel 5
Laravel 5Laravel 5
Laravel 5
 
Introdução a projetos baseados em apache maven
Introdução a projetos baseados em apache mavenIntrodução a projetos baseados em apache maven
Introdução a projetos baseados em apache maven
 
Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1Desenvolvimento de sistemas web com php Frameworks - Aula 1
Desenvolvimento de sistemas web com php Frameworks - Aula 1
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
 
Aula maven
Aula   mavenAula   maven
Aula maven
 
Introdução ao Asp.NET MVC
Introdução ao Asp.NET MVCIntrodução ao Asp.NET MVC
Introdução ao Asp.NET MVC
 
Java 9, 10, 11
Java 9, 10, 11Java 9, 10, 11
Java 9, 10, 11
 
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4Desenvolvimento de sistemas web com PHP Frameworks - Aula 4
Desenvolvimento de sistemas web com PHP Frameworks - Aula 4
 
ALM e Operações - Workshop - Como Diagnosticar um Incidente
ALM e Operações - Workshop - Como Diagnosticar um IncidenteALM e Operações - Workshop - Como Diagnosticar um Incidente
ALM e Operações - Workshop - Como Diagnosticar um Incidente
 
JSPs Introdução Parte 1
JSPs Introdução Parte 1JSPs Introdução Parte 1
JSPs Introdução Parte 1
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
 

Andere mochten auch

Relatório de atividades do conselho de 6 6-2014 a 20-6-2014
Relatório de atividades do conselho de  6 6-2014 a 20-6-2014Relatório de atividades do conselho de  6 6-2014 a 20-6-2014
Relatório de atividades do conselho de 6 6-2014 a 20-6-2014cmspg
 
Relatório de atividades do conselho de 23 5-2014 a 6-6-2014
Relatório de atividades do conselho de  23 5-2014 a 6-6-2014Relatório de atividades do conselho de  23 5-2014 a 6-6-2014
Relatório de atividades do conselho de 23 5-2014 a 6-6-2014cmspg
 
Oficinashowpronto 091205130747-phpapp01
Oficinashowpronto 091205130747-phpapp01Oficinashowpronto 091205130747-phpapp01
Oficinashowpronto 091205130747-phpapp01IsaRoHerculano
 
039.guerra.civil. .ms.marvel.v2.06.hq.br.07 jun07.os.impossiveis.br.gibihq
039.guerra.civil. .ms.marvel.v2.06.hq.br.07 jun07.os.impossiveis.br.gibihq039.guerra.civil. .ms.marvel.v2.06.hq.br.07 jun07.os.impossiveis.br.gibihq
039.guerra.civil. .ms.marvel.v2.06.hq.br.07 jun07.os.impossiveis.br.gibihqMarcos Donato
 
Ata da 13ª reunião ordinária do conselho municipal de saúde (09 07-2013)
Ata da 13ª reunião ordinária do conselho municipal de saúde (09 07-2013)Ata da 13ª reunião ordinária do conselho municipal de saúde (09 07-2013)
Ata da 13ª reunião ordinária do conselho municipal de saúde (09 07-2013)cmspg
 
Watchmen.11.de.12.hq.br.27 ago05.gibihq
Watchmen.11.de.12.hq.br.27 ago05.gibihqWatchmen.11.de.12.hq.br.27 ago05.gibihq
Watchmen.11.de.12.hq.br.27 ago05.gibihqMarcos Donato
 
Batman o longo dia das bruxas 08
Batman   o longo dia das bruxas 08Batman   o longo dia das bruxas 08
Batman o longo dia das bruxas 08Marcos Donato
 
Lição 1 utilização da interface - Solidworks
Lição 1   utilização da interface - SolidworksLição 1   utilização da interface - Solidworks
Lição 1 utilização da interface - SolidworksMarcelo Magalhaes Barbosa
 
Atividade petróleo 7 ano b
Atividade petróleo   7 ano bAtividade petróleo   7 ano b
Atividade petróleo 7 ano bInês Cestaro
 
Campanella tijdens het midzomerfestival in holten
Campanella tijdens het midzomerfestival in holtenCampanella tijdens het midzomerfestival in holten
Campanella tijdens het midzomerfestival in holtenTABSchuppert
 
One piece volume 55 (533-541)
One piece volume 55 (533-541)One piece volume 55 (533-541)
One piece volume 55 (533-541)Marcos Donato
 
Relatório de atividades do conselho de25 10-13 a 08-11-13
Relatório de atividades do conselho de25 10-13 a  08-11-13Relatório de atividades do conselho de25 10-13 a  08-11-13
Relatório de atividades do conselho de25 10-13 a 08-11-13cmspg
 

Andere mochten auch (20)

Relatório de atividades do conselho de 6 6-2014 a 20-6-2014
Relatório de atividades do conselho de  6 6-2014 a 20-6-2014Relatório de atividades do conselho de  6 6-2014 a 20-6-2014
Relatório de atividades do conselho de 6 6-2014 a 20-6-2014
 
Relatório de atividades do conselho de 23 5-2014 a 6-6-2014
Relatório de atividades do conselho de  23 5-2014 a 6-6-2014Relatório de atividades do conselho de  23 5-2014 a 6-6-2014
Relatório de atividades do conselho de 23 5-2014 a 6-6-2014
 
Letras pra fomi
Letras pra fomiLetras pra fomi
Letras pra fomi
 
Lombardia presentazione e015 - #TDLAB
Lombardia presentazione e015 - #TDLABLombardia presentazione e015 - #TDLAB
Lombardia presentazione e015 - #TDLAB
 
Recuperação 2015
Recuperação 2015Recuperação 2015
Recuperação 2015
 
Oficinashowpronto 091205130747-phpapp01
Oficinashowpronto 091205130747-phpapp01Oficinashowpronto 091205130747-phpapp01
Oficinashowpronto 091205130747-phpapp01
 
039.guerra.civil. .ms.marvel.v2.06.hq.br.07 jun07.os.impossiveis.br.gibihq
039.guerra.civil. .ms.marvel.v2.06.hq.br.07 jun07.os.impossiveis.br.gibihq039.guerra.civil. .ms.marvel.v2.06.hq.br.07 jun07.os.impossiveis.br.gibihq
039.guerra.civil. .ms.marvel.v2.06.hq.br.07 jun07.os.impossiveis.br.gibihq
 
Scheda strategia Abruzzo - #TDLAB
Scheda strategia Abruzzo - #TDLABScheda strategia Abruzzo - #TDLAB
Scheda strategia Abruzzo - #TDLAB
 
Ata da 13ª reunião ordinária do conselho municipal de saúde (09 07-2013)
Ata da 13ª reunião ordinária do conselho municipal de saúde (09 07-2013)Ata da 13ª reunião ordinária do conselho municipal de saúde (09 07-2013)
Ata da 13ª reunião ordinária do conselho municipal de saúde (09 07-2013)
 
Watchmen.11.de.12.hq.br.27 ago05.gibihq
Watchmen.11.de.12.hq.br.27 ago05.gibihqWatchmen.11.de.12.hq.br.27 ago05.gibihq
Watchmen.11.de.12.hq.br.27 ago05.gibihq
 
Batman o longo dia das bruxas 08
Batman   o longo dia das bruxas 08Batman   o longo dia das bruxas 08
Batman o longo dia das bruxas 08
 
Lição 1 utilização da interface - Solidworks
Lição 1   utilização da interface - SolidworksLição 1   utilização da interface - Solidworks
Lição 1 utilização da interface - Solidworks
 
Exposición tema 4
Exposición tema 4Exposición tema 4
Exposición tema 4
 
El Lado Oscuro De La Noche
El Lado Oscuro De La NocheEl Lado Oscuro De La Noche
El Lado Oscuro De La Noche
 
Atividade petróleo 7 ano b
Atividade petróleo   7 ano bAtividade petróleo   7 ano b
Atividade petróleo 7 ano b
 
Campanella tijdens het midzomerfestival in holten
Campanella tijdens het midzomerfestival in holtenCampanella tijdens het midzomerfestival in holten
Campanella tijdens het midzomerfestival in holten
 
Scheda strategia Piemonte - #TDLAB
Scheda strategia Piemonte - #TDLABScheda strategia Piemonte - #TDLAB
Scheda strategia Piemonte - #TDLAB
 
One piece volume 55 (533-541)
One piece volume 55 (533-541)One piece volume 55 (533-541)
One piece volume 55 (533-541)
 
Relatório de atividades do conselho de25 10-13 a 08-11-13
Relatório de atividades do conselho de25 10-13 a  08-11-13Relatório de atividades do conselho de25 10-13 a  08-11-13
Relatório de atividades do conselho de25 10-13 a 08-11-13
 
Kids e o ano liturgico
Kids e o ano liturgicoKids e o ano liturgico
Kids e o ano liturgico
 

Ähnlich wie Web Offline

Apostila php orientado a objetos
Apostila php   orientado a objetosApostila php   orientado a objetos
Apostila php orientado a objetosFabiano Rodrigues
 
Phalcon FrameWork - Considerações Iniciais
Phalcon FrameWork - Considerações IniciaisPhalcon FrameWork - Considerações Iniciais
Phalcon FrameWork - Considerações IniciaisPauloRobertoBolsanel
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev IntroduçãoMarcio Marinho
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotationeduardo dias
 
Servidor de Aplicação Web: CherryPy - Python
Servidor de Aplicação  Web: CherryPy - PythonServidor de Aplicação  Web: CherryPy - Python
Servidor de Aplicação Web: CherryPy - Pythonantonio sérgio nogueira
 
Php5 Orientado A Objetos
Php5 Orientado A ObjetosPhp5 Orientado A Objetos
Php5 Orientado A ObjetosRápido Site
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
Mule esb com framework cucumber part 1
Mule esb com framework cucumber part 1Mule esb com framework cucumber part 1
Mule esb com framework cucumber part 1Jeison Barros
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyDesenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyantonio sérgio nogueira
 
Html5 pt - Offline Apps
Html5 pt - Offline AppsHtml5 pt - Offline Apps
Html5 pt - Offline AppsByclosure
 
Curso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationCurso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationMario Sergio
 
Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Erisvaldo Junior
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 

Ähnlich wie Web Offline (20)

40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
Apostila php orientado a objetos
Apostila php   orientado a objetosApostila php   orientado a objetos
Apostila php orientado a objetos
 
Tutorial struts
Tutorial strutsTutorial struts
Tutorial struts
 
Phalcon FrameWork - Considerações Iniciais
Phalcon FrameWork - Considerações IniciaisPhalcon FrameWork - Considerações Iniciais
Phalcon FrameWork - Considerações Iniciais
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev Introdução
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotation
 
Servidor de Aplicação Web: CherryPy - Python
Servidor de Aplicação  Web: CherryPy - PythonServidor de Aplicação  Web: CherryPy - Python
Servidor de Aplicação Web: CherryPy - Python
 
Php5 Orientado A Objetos
Php5 Orientado A ObjetosPhp5 Orientado A Objetos
Php5 Orientado A Objetos
 
Cake Php
Cake PhpCake Php
Cake Php
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direito
 
Mule esb com framework cucumber part 1
Mule esb com framework cucumber part 1Mule esb com framework cucumber part 1
Mule esb com framework cucumber part 1
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Palestra
PalestraPalestra
Palestra
 
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyDesenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
 
Html5 pt - Offline Apps
Html5 pt - Offline AppsHtml5 pt - Offline Apps
Html5 pt - Offline Apps
 
Curso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web ApplicationCurso de Java (Parte 7) Web Application
Curso de Java (Parte 7) Web Application
 
Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direito
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
Criando cliente com wsimport
Criando cliente com wsimportCriando cliente com wsimport
Criando cliente com wsimport
 

Kürzlich hochgeladen

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 

Kürzlich hochgeladen (6)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 

Web Offline

  • 1. Web Off-line Desenvolvendo aplicações web com: Application Cache e Storage Guilherme Visi Siquinelli
  • 3.
  • 4. +
  • 5.
  • 6. ===
  • 8. Pra que !@)#* isso serve?
  • 9.
  • 10.
  • 11. Application Cache e Web Storage
  • 12. Application Cache Benefícios ● Navegação off-line ● Velocidade ● Redução de carga do servidor
  • 13. Application Cache Diferente da API Storage que falaremos a frente, o Application Cache armazena o aplicativo em sí, todos os arquivos HTML, CSS, JS, Imagens e etc exigidos para seu funcionamento, e também diferente da cache de navegador web normal, ele não é apagado quando o usuário limpa o cache, eles são instalados e permenecem ali até que eles mesmos se desintalem ou o usuário os exclua.
  • 14. Application Cache Para instalar um aplicativo na cache, precisamos criar um arquivo manifesto listando os URLs exigidos, e entáo vincular a página HTML principal ao manifesto configurando o atributo manifest da tag <html>
  • 15. Application Cache Um aplicativo web baixado pela primeira vez e colocado na cache, qualquer carregamento subsequente será feito a partir da cache. Então todos os arquivos exigidos devem estar listados na cache, caso contrário não serão carregados. Essa política simula o estado off-line. Em geral, aplicativos web mais complicados não podem colocar na cache todos os recursos que exigem, mas ainda podem usar a cache se tiverem um manifesto mais complexo.
  • 16. Application Cache Manifestos complexos Os arquivos manifesto tem uma sintaxe um pouco mais complicada do que esse exemplo que usamos, e existem outras duas maneiras de listar recursos em um manifesto. Além da seção "CACHE:" padrão, também temos as seções que começam com os cabeçalhos "NETWORK:" e "FALLBACK:"
  • 17. Application Cache NETWORK: Esta seção especifica URLs que nunca devem ser colocados na cache e sempre devem ser recuperados da rede. Podemos usar prefixos de URL, cujo recurso comece com o prefixo será carregado da rede, nesta seção listamos scripts do lado do servidor, que usam linguagens de backend, como PHP, Ruby, NodeJS, Java e etc... Se estivermos off-line, evidentemente a tentativa de carregamento vai falhar. Então vamos a seção FALLBACK.
  • 18. Application Cache FALLBACK: Esse cabeçalho inclue dois URLs em cada linha, o segundo URL é carregado e armazenado na cache, o primeiro URL é um prefixo. Os URLs correspondentes a este prefixo não serão colocados na cache, mas vão ser carregados da rede, quando possível. Se a tentativa de carregamento falhar, o recurso especificado pelo segundo URL colocado na cache será usado em seu lugar.
  • 20. Application Cache Atualização da cache Quando um aplicativo é carregado na cache, toda requisição busca diretamente da cache, mesmo se estivermos online, a verificação é feita de forma assíncrona. Se uma mudança é encontrada o arquivo de manifesto todos arquivos que ele faz referência são baixados e reinstalados na cache. Importante! Note que o navegador não verifica se algum dos arquivos da cache mudou, somente o manifesto!
  • 23. Application Cache Eventos Pense em um laço de repetição de eventos, que recebem repetidamente informações para processar e disparar uma função de resposta de acordo com o evento. É bastante flexível e permite um sistema assíncrono.
  • 24. Application Cache Comunicação assíncrona De forma simples, podemos dizer que uma comunicação é assíncrona quando há mais de um canal enviando e recebendo informações em tempos diferentes, ou seja, não segue o workflow natural de um aplicativo. Link de exemplo: http://nodejsreactions.tumblr. com/post/60458066021/when-i-forget-that-async-doesnt-work-everywhere
  • 25. Application Cache Com a API Application Cache podemos usar 8 eventos disparados assincronamente para monitoramento e tratamento da aplicação. Vamos ver um pouquinho de cada um...
  • 26. Application Cache onchecking: sempre disparado primeiro, ele verifica seu arquivo manifesto. onnoupdate: é disparado se estivermos usando a versão atualizada da aplicação.
  • 27. Application Cache ondownloading: se a aplicação ainda não estiver na cache ou o manifesto for atualizado, ele sinaliza o inicio do processo de download. onprogress: disparado periodicamente durante o processo de download, normalmente para cada arquivo baixado.
  • 28. Application Cache oncached: é disparado na primeira vez que uma aplicação é colocada na cache. onupdateready: após detecção e download de uma nova versão da aplicação, esse evento é disparado.
  • 29. Application Cache onerror: disparado para erros no carregamento do manifesto ou da aplicação em cache. onobsolete: se o arquivo manifesto referenciado no html não existe, esse evento é disparado e a aplicação é removida da cache.
  • 30. Application Cache Outra alternativa é usar a propriedade status do objeto applicationCache, ela retorna 6 valores possíveis: Também vamos ver um pouco de cada um ...
  • 31. Application Cache UNCACHED ou 0: aplicação não referencia um arquivo manifesto. IDLE ou 1: manifesto verificado, está na cache e atualizado.
  • 32. Application Cache CHECKING ou 2: o navegador está verificando o arquivo de manifesto. DOWNLOADING ou 3: o navegador está baixando os arquivos listados no manifesto.
  • 33. Application Cache UPDATEREADY ou 4: nova versão baixada e colocada na cache. OBSOLETE ou 5: o manifesto não existe e a cache será excluída.
  • 34. Application Cache O objeto applicationCache também define 2 métodos, o update() e o swapCache(). … Sim, vamos...
  • 36. Application Cache O método update() atualiza e procura uma nova versão do aplicativo, ou seja, ele força o navegador passar pela mesma verificação do manifesto, disparando os mesmos eventos que um aplicativo carregado pela primeira vez.
  • 37. Application Cache O método swapCache() diz ao navegador que pode descartar a cache antiga e atender a qualquer pedido futuro a partir da nova cache, isso não faz recarregar o aplicativo, HTML, imagens e scripts continuam na versão antiga, por isso seu uso tem que ser muito bem planejado.
  • 38. Application Cache De forma simples, só faz sentido chamar o método swapCache() quando a propriedade status do objeto applicationCache retorna UPDATEREADY ou OBSOLETE, em outros casos dispara uma exceção.
  • 39. Storage LocalStorage e SessionStorage, ambos propriedades do objeto Window que fazem referência a um objeto Storage, um array associativo persistente que mapeia chaves de string em valores de string. A diferença entre os dois tem a ver com vida útil e escopo, ou seja, por quanto tempo os dados são salvos e a quem estão acessíveis.
  • 40. Storage Com esta API podemos gravar dados estruturados (objetos ou arrays), valores primitivos, valores internos, como datas, expressões regulares e até objetos File.
  • 41. Storage Os dados armazenados em localStorage são permanentes, não expiram e continuam lá até que um aplicativo web ou o navegador os exclua. Ele tem como escopo a origem do documento, definida por seu protocolo, nome de host e porta.
  • 42. Storage Já os dados armazenados em sessionStorage são perdidos quando a janela ou guia é fechada permanentemente. O escopo apesar de também ser definido pela origem do documento, são separados pela janela ou guia, cada guia grava seus dados em sessionStorage separadamente.
  • 43. Storage Armazenamento A API de armazenamento possui métodos para manipulação dos dados, inclusive "get and set" para atribuição e recuperação dos dados armazenados, também "remove and clear", os nomes por sí são bem sugestivos, então vamos passar para os exemplos no próximo slide.
  • 45. Aplication Cache & Storage Conclusão Com estas APIs podemos desenvolver aplicações web simples e complexas que funcionam off-line, basta saber trabalhá-las. Ou então até desenvolver um plugin jQuery para facilitar seu uso e disponibilizar para a comunidade. Pensem nisso...
  • 47. Aplication Cache & Storage Referências bibliográficas David Flanagan, JavaScript O guia definitivo, 6ª edição, Bookman 2013. Diego Eis, Elcio Ferreira, HTML5 e CSS3 com farinha e pimenta, 1ª edição. HTML5 Rocks, http://www.html5rocks.com/pt/features/offline 23/09/2013.