SlideShare uma empresa Scribd logo
Mantendo os dados do seu app
web offline com PouchDB
Prof. Sidney Sousa
Sobre o que conversaremos?
 PWAs
 Armazenamento de dados offline
 Sincronização com CouchDB
Público alvo
 Devs web/mobile
 Estudantes de desenvolvimento de software
... mas antes, quem sou eu?
 Bacharel e mestre em Ciência da
Computação (UEMS e UNICAMP)
 Dev há 14 anos (Peanuts, DigithoBrasil,
CASSEMS, IFMS)
 Professor há 10 anos (FCG, IFMS)
 Professor de Desenvolvimento Web no
IFMS campus Aquidauana desde 2013
 Javaneiro desde 2012
 Programming language agnostic
UX dos apps web: histórico
 Década 90: Homepages e conteúdo estático
 Década de 2000: Web 2.0 e Web Semântica; Início do pensamento “responsivo”
 Década de 2010: Responsividade e Mobile First; PWAs
PWA
 Progressive Web App
 De acordo com o Google, um PWA deve ser:
 Confiável – Carrega instantaneamente e nunca exibe Downasaur, mesmo em condições de rede
instáveis.
 Rápido - Responde rapidamente às interações do usuário com transições suaves e sem rolagens de tela
“escrotas”.
 Engajante - Possui a aparência de um app nativo em dispositivos móveis, com UX imersiva.
PWA
 Progressive Web App
 De acordo com o Google, um PWA deve ser:
 Confiável – Carrega instantaneamente e nunca exibe Downasaur, mesmo em condições de rede
instáveis.
 Rápido - Responde rapidamente às interações do usuário com transições suaves e sem rolagens de tela
“escrotas”.
 Engajante - Possui a aparência de um app nativo em dispositivos móveis, com UX imersiva.
SPA
 Single Page App
 App web que interage com o usuário reescrevendo a página atual ao invés de carregar uma
nova página do servidor
 Carrega todos os artefatos do app (HTML, CSS e JavaScript) com uma única carga inicial de
página
 A página nunca recarrega em nenhum momento do processo
 Frameworks/bibliotecas famosas: Angular, React, Vue.js
PWA
 Progressive Web App
 De acordo com o Google, um PWA deve ser:
 Confiável – Carrega instantaneamente e nunca exibe Downasaur, mesmo em condições de rede
instáveis.
 Rápido - Responde rapidamente às interações do usuário com transições suaves e sem rolagens de tela
“escrotas”.
 Engajante - Possui a aparência de um app nativo em dispositivos móveis, com UX imersiva.
SPA de novo!
 A navegação entre “páginas” em um SPA bem feito é instantânea
 Bom uso de CSS e responsividade
PWA
 Progressive Web App
 De acordo com o Google, um PWA deve ser:
 Confiável – Carrega instantaneamente e nunca exibe Downasaur, mesmo em condições de rede
instáveis.
 Rápido - Responde rapidamente às interações do usuário com transições suaves e sem rolagens de tela
“escrotas”.
 Engajante - Possui a aparência de um app nativo em dispositivos móveis, com UX imersiva.
Web App Manifest
 Arquivo que oferece metadados associados ao app
 Ex.: ícones do app, URL a ser aberta quando o usuário abre o app
 Permite que o app possa ser aberto no browser em tela cheia (full screen)
Exemplo
Armazenamento de dados
 Quando online, consumir alguma API (REST preferencialmente!)
 DBMS agnostic
Armazenamento de dados
 Quando offline...
 ... e quando offline?
Vixi...
... mas devo me preocupar com isto?
 Como diria o sábio, depende...
 ... mas, vale a pena refletir acerca de algumas coisas:
 Confiabilidade
 Qualidade da conexão de rede
 Mobilidade
O que é o PouchDB
 DBMS JavaScript inspirado no CouchDB
 Armazena dados no browser
 Oferece sincronização com o CouchDB
 Motivação: fazer com que o app funcione
bem online ou off-line
Modelo de dados
 PouchDB é um DBMS NoSQL baseado em documentos
 Formato JSON
{
"_id": "2018-11-16T15:57:03.269Z",
"_rev": "1-a8ad186fef3bdc10c70b28a2a3dec79a",
"nome": "Sidney Sousa",
"telefone": "(67) 99105-6178"
}
Do you like code?
Vamos ver um pouco de código?
Instalação
 Bower: bower i --save pouchdb
 NPM: npm i --save pouchdb
 CDN: //cdn.jsdelivr.net/npm/pouchdb@7.0.0/dist/pouchdb.min.js
Importação
 <= ES5: var PouchDB = require('pouchdb’);
 ES6: import PouchDB from ‘pouchdb’
Criando um banco de dados
const db = new PouchDB('contatos');
Salvando um documento
let contato = { nome: 'Sidney Sousa', telefone: '(67) 99999-9999' };
db.put(contato, (erro, resposta) => {
if(!erro)
console.log('Contato salvo!');
});
Recuperando todos os documentos
db.allDocs({ include_docs: true, descending: true }, (err, doc) => {
console.log(doc.rows);
})
Removendo um contato
db.remove(contato);
Onde ficam os dados?
 IndexedDB ou WebSQL em browsers que não suportam IndexedDB
 Browsers que suportam PouchDB:
 Firefox 29+ (Including Firefox OS and Firefox for Android)
 Chrome 30+
 Safari 5+
 Internet Explorer 10+
 Opera 21+
 Android 4.0+
 iOS 7.1+
 Windows Phone 8+
Onde ficam os dados?
Quanto eu posso armazenar no browser?
 Chrome: calcula de acordo com o espaço de armazenamento do disco do usuário (20% de 1/3
do espaço total do disco)
 Firefox: sem limites, mas pede confirmação do usuário caso o armazenamento ultrapasse 50 MB
 Safari: sem limites no desktop, 50 MB no iOS (WebSQL)
 Lista completa de browsers: https://pouchdb.com/faq.html#data_limits
Sincronizando com o CouchDB
 CouchDB é um DBMS orientado a
documentos
 Possui como maior diferencial uma API
Rest pronta para operações e consultas
 Encapsula os dados em formato JSON,
porém oferece suporte para dados
binários
 Talvez, o maior concorrente do MongoDB
Sincronizando com o CouchDB
let urlBancoDeDados = 'http://meubancodedados.com/contatos';
db.sync(urlBancoDeDados, { live: true, retry: true });
Links úteis + Contato
 PouchDB: https://pouchdb.com
 CouchDB: http://couchdb.apache.org
 IBM Cloudant: https://www.ibm.com/cloud/cloudant
 Exemplo de PWA com PouchDB:
git clone https://github.com/sidneyroberto/exemplo-pouchdb.git
 Contato:
 E-mail: sidney.sousa@ifms.edu.br
 Github: https://github.com/sidneyroberto/
Obrigado pela atenção!

Mais conteúdo relacionado

Semelhante a Mantendo os dados do seu app web offline com PouchDB

Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
Rodrigo Rodrigues
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sites
thiagolima
 

Semelhante a Mantendo os dados do seu app web offline com PouchDB (20)

O poder das Progressive Web Apps
O poder das Progressive Web AppsO poder das Progressive Web Apps
O poder das Progressive Web Apps
 
7Masters - PWA - Publishing using Universal Windows Apps
7Masters - PWA - Publishing using Universal Windows Apps7Masters - PWA - Publishing using Universal Windows Apps
7Masters - PWA - Publishing using Universal Windows Apps
 
Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web Design
 
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e KotlinO uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
 
Bootstrap desenvolvendo e customizando interfaces para web, introduzindo aos ...
Bootstrap desenvolvendo e customizando interfaces para web, introduzindo aos ...Bootstrap desenvolvendo e customizando interfaces para web, introduzindo aos ...
Bootstrap desenvolvendo e customizando interfaces para web, introduzindo aos ...
 
Dominando o Ionic Framework
Dominando o Ionic FrameworkDominando o Ionic Framework
Dominando o Ionic Framework
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sites
 
Aplicacoes responsivas
Aplicacoes responsivasAplicacoes responsivas
Aplicacoes responsivas
 
Do MVP ao PWA, melhorando o engajamento com cliente na CVC
Do MVP ao PWA, melhorando o engajamento com cliente na CVCDo MVP ao PWA, melhorando o engajamento com cliente na CVC
Do MVP ao PWA, melhorando o engajamento com cliente na CVC
 
Introdução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptxIntrodução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptx
 
NoSQL + Node.js
NoSQL + Node.jsNoSQL + Node.js
NoSQL + Node.js
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
 
Desenvolvimento web com python e web2py
Desenvolvimento web com python e web2pyDesenvolvimento web com python e web2py
Desenvolvimento web com python e web2py
 
desenvolvimento-web-javascript
desenvolvimento-web-javascriptdesenvolvimento-web-javascript
desenvolvimento-web-javascript
 
NoSQL, MongoDB e MEAN
NoSQL, MongoDB e MEANNoSQL, MongoDB e MEAN
NoSQL, MongoDB e MEAN
 
AMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps ModernasAMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps Modernas
 
ASP.NET 5, MVC 6 e além
ASP.NET 5, MVC 6 e alémASP.NET 5, MVC 6 e além
ASP.NET 5, MVC 6 e além
 
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin -...
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin -...O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin -...
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin -...
 
Responsive Web Design - Introdução
Responsive Web Design - IntroduçãoResponsive Web Design - Introdução
Responsive Web Design - Introdução
 

Mais de Sidney Roberto

Apostila - Linguagem de Programação I
Apostila - Linguagem de Programação IApostila - Linguagem de Programação I
Apostila - Linguagem de Programação I
Sidney Roberto
 
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Sidney Roberto
 
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Sidney Roberto
 
Manipulação de Datas em Java
Manipulação de Datas em JavaManipulação de Datas em Java
Manipulação de Datas em Java
Sidney Roberto
 

Mais de Sidney Roberto (20)

Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stack
 
Personagens negros na cultura nerd
Personagens negros na cultura nerdPersonagens negros na cultura nerd
Personagens negros na cultura nerd
 
Regulamento da batalha campal do DCN IV
Regulamento da batalha campal do DCN IVRegulamento da batalha campal do DCN IV
Regulamento da batalha campal do DCN IV
 
Regulamento dos concursos de cosplay e cospobre do DCN IV
Regulamento dos concursos de cosplay e cospobre do DCN IVRegulamento dos concursos de cosplay e cospobre do DCN IV
Regulamento dos concursos de cosplay e cospobre do DCN IV
 
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQRegulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
 
Tecnologias e Mercado de Trabalho
Tecnologias e Mercado de TrabalhoTecnologias e Mercado de Trabalho
Tecnologias e Mercado de Trabalho
 
Introdução à Programação de Computadores com Python
Introdução à Programação de Computadores com PythonIntrodução à Programação de Computadores com Python
Introdução à Programação de Computadores com Python
 
Palestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
Palestra de boas vindas aos estudantes do curso TSI do IFMS AquidauanaPalestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
Palestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
 
Web Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaWeb Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciência
 
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQRegulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
 
Tutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidTutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para Android
 
Minha opinião sobre o sistema educacional de base brasileiro
Minha opinião sobre o sistema educacional de base brasileiroMinha opinião sobre o sistema educacional de base brasileiro
Minha opinião sobre o sistema educacional de base brasileiro
 
Apostila - Linguagem de Programação I
Apostila - Linguagem de Programação IApostila - Linguagem de Programação I
Apostila - Linguagem de Programação I
 
Listas (parte 2 de 3)
Listas (parte 2 de 3)Listas (parte 2 de 3)
Listas (parte 2 de 3)
 
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
 
Listas (parte 1)
Listas (parte 1)Listas (parte 1)
Listas (parte 1)
 
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
 
Fatores Humanos
Fatores HumanosFatores Humanos
Fatores Humanos
 
Laços de Repetição
Laços de RepetiçãoLaços de Repetição
Laços de Repetição
 
Manipulação de Datas em Java
Manipulação de Datas em JavaManipulação de Datas em Java
Manipulação de Datas em Java
 

Mantendo os dados do seu app web offline com PouchDB

  • 1. Mantendo os dados do seu app web offline com PouchDB Prof. Sidney Sousa
  • 2. Sobre o que conversaremos?  PWAs  Armazenamento de dados offline  Sincronização com CouchDB
  • 3. Público alvo  Devs web/mobile  Estudantes de desenvolvimento de software
  • 4. ... mas antes, quem sou eu?  Bacharel e mestre em Ciência da Computação (UEMS e UNICAMP)  Dev há 14 anos (Peanuts, DigithoBrasil, CASSEMS, IFMS)  Professor há 10 anos (FCG, IFMS)  Professor de Desenvolvimento Web no IFMS campus Aquidauana desde 2013  Javaneiro desde 2012  Programming language agnostic
  • 5. UX dos apps web: histórico  Década 90: Homepages e conteúdo estático  Década de 2000: Web 2.0 e Web Semântica; Início do pensamento “responsivo”  Década de 2010: Responsividade e Mobile First; PWAs
  • 6. PWA  Progressive Web App  De acordo com o Google, um PWA deve ser:  Confiável – Carrega instantaneamente e nunca exibe Downasaur, mesmo em condições de rede instáveis.  Rápido - Responde rapidamente às interações do usuário com transições suaves e sem rolagens de tela “escrotas”.  Engajante - Possui a aparência de um app nativo em dispositivos móveis, com UX imersiva.
  • 7. PWA  Progressive Web App  De acordo com o Google, um PWA deve ser:  Confiável – Carrega instantaneamente e nunca exibe Downasaur, mesmo em condições de rede instáveis.  Rápido - Responde rapidamente às interações do usuário com transições suaves e sem rolagens de tela “escrotas”.  Engajante - Possui a aparência de um app nativo em dispositivos móveis, com UX imersiva.
  • 8. SPA  Single Page App  App web que interage com o usuário reescrevendo a página atual ao invés de carregar uma nova página do servidor  Carrega todos os artefatos do app (HTML, CSS e JavaScript) com uma única carga inicial de página  A página nunca recarrega em nenhum momento do processo  Frameworks/bibliotecas famosas: Angular, React, Vue.js
  • 9. PWA  Progressive Web App  De acordo com o Google, um PWA deve ser:  Confiável – Carrega instantaneamente e nunca exibe Downasaur, mesmo em condições de rede instáveis.  Rápido - Responde rapidamente às interações do usuário com transições suaves e sem rolagens de tela “escrotas”.  Engajante - Possui a aparência de um app nativo em dispositivos móveis, com UX imersiva.
  • 10. SPA de novo!  A navegação entre “páginas” em um SPA bem feito é instantânea  Bom uso de CSS e responsividade
  • 11. PWA  Progressive Web App  De acordo com o Google, um PWA deve ser:  Confiável – Carrega instantaneamente e nunca exibe Downasaur, mesmo em condições de rede instáveis.  Rápido - Responde rapidamente às interações do usuário com transições suaves e sem rolagens de tela “escrotas”.  Engajante - Possui a aparência de um app nativo em dispositivos móveis, com UX imersiva.
  • 12. Web App Manifest  Arquivo que oferece metadados associados ao app  Ex.: ícones do app, URL a ser aberta quando o usuário abre o app  Permite que o app possa ser aberto no browser em tela cheia (full screen)
  • 14. Armazenamento de dados  Quando online, consumir alguma API (REST preferencialmente!)  DBMS agnostic
  • 15. Armazenamento de dados  Quando offline...  ... e quando offline?
  • 17. ... mas devo me preocupar com isto?  Como diria o sábio, depende...  ... mas, vale a pena refletir acerca de algumas coisas:  Confiabilidade  Qualidade da conexão de rede  Mobilidade
  • 18. O que é o PouchDB  DBMS JavaScript inspirado no CouchDB  Armazena dados no browser  Oferece sincronização com o CouchDB  Motivação: fazer com que o app funcione bem online ou off-line
  • 19. Modelo de dados  PouchDB é um DBMS NoSQL baseado em documentos  Formato JSON { "_id": "2018-11-16T15:57:03.269Z", "_rev": "1-a8ad186fef3bdc10c70b28a2a3dec79a", "nome": "Sidney Sousa", "telefone": "(67) 99105-6178" }
  • 20. Do you like code? Vamos ver um pouco de código?
  • 21. Instalação  Bower: bower i --save pouchdb  NPM: npm i --save pouchdb  CDN: //cdn.jsdelivr.net/npm/pouchdb@7.0.0/dist/pouchdb.min.js
  • 22. Importação  <= ES5: var PouchDB = require('pouchdb’);  ES6: import PouchDB from ‘pouchdb’
  • 23. Criando um banco de dados const db = new PouchDB('contatos');
  • 24. Salvando um documento let contato = { nome: 'Sidney Sousa', telefone: '(67) 99999-9999' }; db.put(contato, (erro, resposta) => { if(!erro) console.log('Contato salvo!'); });
  • 25. Recuperando todos os documentos db.allDocs({ include_docs: true, descending: true }, (err, doc) => { console.log(doc.rows); })
  • 27. Onde ficam os dados?  IndexedDB ou WebSQL em browsers que não suportam IndexedDB  Browsers que suportam PouchDB:  Firefox 29+ (Including Firefox OS and Firefox for Android)  Chrome 30+  Safari 5+  Internet Explorer 10+  Opera 21+  Android 4.0+  iOS 7.1+  Windows Phone 8+
  • 28. Onde ficam os dados?
  • 29. Quanto eu posso armazenar no browser?  Chrome: calcula de acordo com o espaço de armazenamento do disco do usuário (20% de 1/3 do espaço total do disco)  Firefox: sem limites, mas pede confirmação do usuário caso o armazenamento ultrapasse 50 MB  Safari: sem limites no desktop, 50 MB no iOS (WebSQL)  Lista completa de browsers: https://pouchdb.com/faq.html#data_limits
  • 30. Sincronizando com o CouchDB  CouchDB é um DBMS orientado a documentos  Possui como maior diferencial uma API Rest pronta para operações e consultas  Encapsula os dados em formato JSON, porém oferece suporte para dados binários  Talvez, o maior concorrente do MongoDB
  • 31. Sincronizando com o CouchDB let urlBancoDeDados = 'http://meubancodedados.com/contatos'; db.sync(urlBancoDeDados, { live: true, retry: true });
  • 32. Links úteis + Contato  PouchDB: https://pouchdb.com  CouchDB: http://couchdb.apache.org  IBM Cloudant: https://www.ibm.com/cloud/cloudant  Exemplo de PWA com PouchDB: git clone https://github.com/sidneyroberto/exemplo-pouchdb.git  Contato:  E-mail: sidney.sousa@ifms.edu.br  Github: https://github.com/sidneyroberto/ Obrigado pela atenção!