Top Banner
Offline Apps HTML5 PT Vasco Andrade e Silva
31

Html5 pt - Offline Apps

Dec 24, 2014

Download

Technology

Byclosure

A capacidade de aplicações web poderem ser corridas offline é uma das principais funcionalidades disponíveis na nova especificação HTML5. Esta apresentação foca-se em como fazer uma aplicação offline usando: application cache, local storage e webSQL (agora deprecated). Ao longo da apresentação será construída uma aplicação móvel que pode correr em múltiplos ambientes.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Html5 pt - Offline Apps

Offline AppsHTML5 PT

Vasco Andrade e Silva

Page 2: Html5 pt - Offline Apps

Quem sou

Co-founder: 

Tecnologia: 

Contacto:  [email protected]@vascoas

Nome:  Vasco Andrade e Silva

Page 3: Html5 pt - Offline Apps

O que fazemos

Page 4: Html5 pt - Offline Apps

Agenda

• HTML5 Spec• O que é uma aplicação?• Application Cache• Web Storage

o Local Storageo Session Storage

• Web SQL Database• Go Offline• Q & A

Page 5: Html5 pt - Offline Apps

HTML5 Spec

Especificações novas do HTML5

• Offline (AppCache)o http://dev.w3.org/html5/spec/offline.html#offline 

• Web Storage (Session Storage e Local Storage)o http://dev.w3.org/html5/webstorage/ 

• Indexed Database APIo http://www.w3.org/TR/IndexedDB/

Nota: as especificações estão escritas num formato para programadores do browser

Web SQL Database (especificação W3C suspensa)• http://www.w3.org/TR/webdatabase/

Page 6: Html5 pt - Offline Apps

O que é uma aplicação?

• Código "Executável" da aplicaçãoo JS + HTML

• Recursos estáticoso Exemplo: CSS, imagens da UI, etc.

• Dados dinâmicoso AJAX + Base de Dados

Page 7: Html5 pt - Offline Apps

Application Cache

Serve para fazer CACHE de:• código "executável" da aplicação• recursos estáticos da aplicação

Características:• Oferece modelo de "instalação"/"actualização" de uma

webapplication (normalmente "single JS page")• Capacidade da aplicação computar e arrancar Offline

(depois da aplicação estar "instalada")• Limites máximos de espaço variam de browser para

browsero http://grinninggecko.com/developing-cross-platform-html5-offline-app-1/

Page 8: Html5 pt - Offline Apps

Application Cache - Como usar?

1.Criar o ficheiro MANIFEST2.Referenciar o ficheiro MANIFEST no ficheiro html

principal da aplicação3.Configurar o servidor web para servir o ficheiro

MANIFEST correctamente4.Testar o funcionamento

Page 9: Html5 pt - Offline Apps

Application Cache - Testar funcionamento

Page 10: Html5 pt - Offline Apps

Application Cache - Criar o ficheiro MANIFEST (1/2)

Secções

• CACHEo lista de ficheiros vão ser "cachados" localmente

• NETWORKo lista de padrões prefixo para detectar recursos que o browser nunca deve

"cachar" e deve sempre transferir da rede

• FALLBACKo lista de padrões prefixo para detectar recursos que devem ser

transferidos ou se tal não for possível substituídos pela entrada especificada

Page 11: Html5 pt - Offline Apps

Application Cache - Criar o ficheiro MANIFEST (2/2)

Ficheiro example.manifest:CACHE MANIFEST# 2011-07-07:v1

CACHE:/style.css/code.js/image1.jpg/counter_offline.html

NETWORK:/counter.phpFALLBACK:/counter.php /counter_offline.html

Page 12: Html5 pt - Offline Apps

Application Cache - Referenciar o ficheiro MANIFEST

<!DOCTYPE html><html manifest="example.manifest">...</html>

Nota: se a aplicação tiver vários ficheiros html todos devem referenciar o mesmo ficheiro manifest.

Page 13: Html5 pt - Offline Apps

Application Cache - Configurar o servidor Web

• O MANIFEST deve ser servido com o mime/type "text/application-cache"

• Os headers "HTTP Expire" e "Cache-Control" devem estar correctos, caso contrário o browser não irá detectar actualizações ao ficheiro MANIFEST e a aplicação não é actualizada!

Page 14: Html5 pt - Offline Apps

Eventos relevantes:• cached: depois de uma instalação;• updateready: depois de uma actualização• error: se o download de QUALQUER UM dos

recursos falhar

Application Cache - Testar funcionamento

if (window.applicationCache) {  applicationCache.addEventListener('updateready', function() {    if (confirm('An update is available. Reload now?'))      window.location.reload();  });}

Depois de uma actualização com sucesso a nova versão ainda não está em uso peloque devemos detectar o evento e perguntar ao utilizador se quer usar a nova versão:

Page 15: Html5 pt - Offline Apps

Application Cache - Suporte dos BrowsersLimite armazenamento

(Mac & Win) ilimitado

(iOS) 10 MB

(Mac & Win) 5 MB

ilimitado

ilimitado (com notificação)

(Android)

Não suportado

(Mac, Win & Linux)

(Win)

Page 16: Html5 pt - Offline Apps

Web Storage - O que é?

Uma API do browser para guardar dados numa base de dados sob a forma de pares chave/valor.

• Característicaso API síncronao Chaves e valores devem ser stringso Bases de dados por domínioo Espaço de armazenamento limitadoo Especificação não está fechada e pode sofrer alterações o Implementado em "todos" os browsers

IE 8+, Safari 4+, Chrome 4+, Opera 10.5+ e Firefox 2+

Page 17: Html5 pt - Offline Apps

Web Storage - Modelointerface Storage {  length;  key(index);  getItem(key);  setItem(key, value);  removeItem(key);  clear();};

Tempo de vida indeterminado

Tempo de vida contexto de janela/tab do browser

Page 18: Html5 pt - Offline Apps

Web Storage - Restrições acesso (1/2)

Page 19: Html5 pt - Offline Apps

Web Storage - Restrições acesso (2/2)

• É respeitada a Same-Origin Policy• Local Storage

o Cada domínio tem acesso à sua BD de forma isoladao Nota: Sub-domínios são domínios

• Session Storageo No Session Storage cada janela/tab do browser tem acesso a uma

área de armazenamento distinta

Page 20: Html5 pt - Offline Apps

Local Storage - Como usar? (1/2)

ArmazenamentolocalStorage["key1"] = "string1"; localStorage.setItem("key1", "string1"); 

Consultavar value1 = localStorage["key1"];                     // -> "string1" var value2 = localStorage.getItem("key2");      // -> "string2" 

Armazenar/consultar dados complexoslocalStorage.setItem("key3", JSON.stringify({"prop1": "xpto", "prop2": 124}) var value3 = JSON.parse(localStorage["key3"]) // -> {prop1: "xpto", prop2: 124} 

Page 21: Html5 pt - Offline Apps

Local Storage - Como usar? (2/2)Verificar suporte antes de usarfunction supportsLocalStorage() {  try {    return 'localStorage' in window && window['localStorage'] !== null;  }   catch (e) {    return false;  }}

Demo!

Page 22: Html5 pt - Offline Apps

Local Storage - Limitações

Limites do espaço disponível para armazenamento• Não exisiste especificação para consultar quanto espaço temos

disponívelo Execepto em IE: localStorage.remainingSpace()

• Se a gravação falhar é lançada a excepção "QUOTA_EXCEEDED_ERR"

No IE8 as alterações são persistidas assincronamente:• Para forçar a escrita síncrona:

1.Chamar localStorage.begin()2.Fazer as alterações3.Chamar localStorage.commit()

• http://msdn.microsoft.com/en-us/library/cc197062(v=vs.85).aspx• http://www.nczonline.net/blog/2009/07/21/introduction-to-

sessionstorage

Page 23: Html5 pt - Offline Apps

Local Storage - Espaço disponívelDesktopChrome                                         2,5MB (UTF-16)Firefox                                           5MBSafari v4                                        ilimitadoSafari v5                                        2,5MB (UTF-16)IE 8 e IE 9                                      2,5MB (UTF-16)Opera                                             ilimitado/definido pelo utilizador

MobileMobile Safari (iPhone/iPad)        2,5MB (UTF-16)Android 2.1                                    >2MB (UTF-16)Android 2.2+, bada                       2,5MB (UTF-16)

Para aplicações distribuídas na web:• contar apenas com 2MB• ou calcular o espaço disponível (http://arty.name/localstorage.html)

Para distribuições controladas:• Opera e Firefox permitem configurar o espaço de armazenamento

Page 24: Html5 pt - Offline Apps

Session Storage

O Session Storage serve para armazenar (de forma persistente) dados específicos a uma janela/tab

• Não é partilhado entre janelas/tabso Como acontece com Local Storage e com Cookies

• Deve substituir o uso de Cookies para guardar informação de forma persistente numa sessão de browser

Page 25: Html5 pt - Offline Apps

Web SQL Database - O que é?

Uma API do browser para armazenar dados em bases de dados utilizando uma variante de SQL

Especificação W3C Suspensa!• http://www.w3.org/TR/webdatabase/• Working group está a trabalhar na especificação IndexedDB em alternativa

Características:• Disponível apenas em WebKit e Opera

o todos os dispositivos iOS e Android usam WebKit!• Única forma nativa de armazenar/operar sobre [muitos] dados

estruturadoso até que o IndexedBD esteja terminado/disseminado 

• Interface assíncronao As interacções com a BD são feitas usando callbacks

• SQL do SQLite (http://www.sqlite.org/lang.html)

Page 26: Html5 pt - Offline Apps

WebSQL - Storage Event

• Objecto window suporta evento 'storage'• Evento 'storage' é despoletado nas outras janelas do

browser quando se fazem operações sobre o Storage

Page 27: Html5 pt - Offline Apps

WebSQL - Exemplo

Best Practices: separar Schema e dados• http://blog.maxaller.name/2010/03/html5-web-sql-database-intro-to-versioning-and-

migrations/ • https://github.com/nanodeath/JS-Migrator/

Demo!

Page 28: Html5 pt - Offline Apps

5 MB (> 5 MB pedido ao utilizador)

WebSQL - Suporte dos BrowsersEspaço Disponível

(Mac & Win) 5 MB (> 5 MB pedido ao utilizador)

(iOS)

(Mac, Win & Linux) 5MB (verificado na v12)

10MB (verificado na 2.3.4)(Android)

Não suportado

(Mac, Win & Linux)

(Win)

Não suportado

Page 29: Html5 pt - Offline Apps

Desktop Offline Apps HTML5 Offline Apps

•Binários são distribuidos

•Dados locais para o funcionamento da aplicação

•Sincronização de base de dados local com serviços web

•Sistema de updates inexistente ou específico a um conjunto de aplicações (exemplo: pacotes debian, updates de windows, etc.)

•Código fonte da aplicação (JS + HTML + CSS) em cache local

•Dados locais para o funcionamento da aplicação

•Sincronização de base de dados local com serviços web

•Modelo de update/instalação especificado e standardizado suportado multi-plataforma e multi-dispositivo

Go Offline

Page 30: Html5 pt - Offline Apps

Por onde começar

AppCache• http://diveintohtml5.org/offline.html • http://appcachefacts.info/

LocalStorage• http://diveintohtml5.org/storage.html 

WebSQL • http://blog.maxaller.name/2010/03/html5-web-sql-database-intro-to-versioning-and-

migrations/ • https://github.com/nanodeath/JS-Migrator/

Page 31: Html5 pt - Offline Apps

Q & A

Obrigado! :)

[email protected]

Dúvidas adicionais?• A Byclosure responde!• Mailing List http://html5pt.org