nobackend e
offlinefirstjoselito.ninja // @joselitojunior1 // alagoasdevday.com.br
Olá, meu nome
é Joselito Júnior
» Modelo e atriz
» Instrutor,
palestrante
» Vencedor de
hackathon
profissional
» Fundador do GDG
Recife
» Fã de Fórmula 1
» Apaixonado por
entender e resolver
Vamos falar sobre
Internet
TheStateofLTE,OpenSignal.Acessoem17/04/2014
4G?
Alagoas:
- Maceió
Pernambuco:
- Recife
- Jaboatão
4G?
Minas Gerais: 4 Cidades
Rio de Janeiro: 4 Cidades
São Paulo: 8 Cidades
Demais estados: capitais
Ter internet
otempotodo
é normal?
Estar Offline
é comumbem mais comum
do que parece
Estar Offline
Nãoé um problema
Estar Offline
Nãodeveriaser um
problema
DesktopConnectedWorld
Mobile First
Offline First
Offline First
é sobre UX
Offline First
é sobre PESSOAS
+ Pessoas
+ Usuários
+ $
Mudanças
Offline tem que ser
mais do quetratar erros
Trate arede de dados como uma
funcionalidade
Não
perderás
informaçãoPrimeiro mandamento do Offline First
Armazenamento
» localStorage
» sessionStorage
» WebSQL
» IndexedDB
Armazenamento
Sincronize ao invés de salvar!
Armazenamento
Sincronize ao invés de salvar!
» Se o usuário está online, envie e
sincronize com servidor
» Se não, salve localmente e sincronize
depois!
Armazenamento
Sincronize ao invés de salvar!
Armazenamento
Sincronize ao invés de salvar!
Use o StorageEvent!
- key
- oldValue
- newValue
- url
Armazenamento
Sincronize ao invés de salvar!
Tem jeito mais fácil? Tem.
Falaremos em breve.
ServiceWorkers
É um Web Worker que tomou muito Whey.
Roda no background do navegador e não tem
acesso ao DOM.
ServiceWorkers
É um Web Worker que tomou muito Whey.
Roda no background do navegador e não tem
acesso ao DOM.
Rende outra talk inteira.
ServiceWorkers
É um Web Worker que tomou muito Whey.
Roda no background do navegador e não tem
acesso ao DOM.
Rende outra talk inteira.
Por exemplo, essa: Offline Web do jeito
certo com ServiceWorkers, Sérgio Lopes.
AppCache
Poderosissímo e um grande filho da p*ta.
<html manifest="offline.appcache">
O manifesto deve estar em todas as
páginas que você desejam que devem se
cacheadas.
AppCache
CACHE MANIFEST
index.html
stylesheet.css
images/logo.png
scripts/main.js
http://cdn.example.com/scripts/main.js
AppCache
Podemos dividir em 3 seções principais:
» CACHE
» NETOWRK
» FALLBACK
AppCache
CACHE
Aquivos abaixo do cabeçalho CACHE (ou sem
cabeçalho, é a seção default) serão
armazenados na primeira vez que forem
acessados.
AppCache
NETWORK
Aqui que começa a confusão.
Arquivos listados aqui podem vir do
servidor se eles não estão no cache.
Na maioria dos casos, usa-se *, para
todas as páginas.
NETWORK:
*
AppCache
FALLBACK
Os arquivos na seção de fallback tem dois
"parâmetros". O primeiro, o arquivo
original (ou pasta), do servidor. O
segundo, o arquivo que vai substituir os
arquivos.
FALLBACK:
/ fallback.html
cardapio/pizzas/calabresa.jpg cardapio/pizza.jpg
cardapio/pizzas/ cardapio/pizza.jpg
AppCache
Cuidados
» O cache tem prioridade ao que está no
servidor.
» O manifesto só será atualizado se o
conteúdo dele for alterado.
» Arquivos não cacheados nao vão carregar
em páginas cacheadas
» E mais: Application Cache is a
Douchebag, Jake Archibald.
Offline First❤
SPA
StaticFront-end driven
Eaparte fácil?
noBackend
"noBackend"
Não é não de "não existe"
É não de "não se preocupe"
localStorage.setItem("chave", "valor");
app.login(user, pass);
app.signUp(email, user, pass);
Email
sendEmail({
to: "marilene@alagoasdevday.com.br",
subject: "Hoje à noitenn…",
content: "<h1>Olá Marilene</h1><p>…</
p>",
attachments: [ 'vinhos.pdf' ]
});
{o/}Dreamcode
APIs do Hoodie
var hoodie = new Hoodie(url);
» hoodie.store
» hoodie.account
» hoodie.id()
» on()
» online ou offline
» change, update
Plugins do Hoodie
AppCache Nanny
Automatização completa do manifesto!
» hoodie install appcache
» npm install -S appcache-nanny
» hoodie.appCache.start();
Parse e Firebase
» Comerciais e mais robustos (BaaS)
» Armazenamento sob demanda
» Plugins
» Push (local) e outros serviços
API Parse
var user = new Parse.User();
user.set("username", "my name");
user.set("password", "my pass");
user.set("email", "email@example.com");
user.set("phone", "415-392-0202");
user.signUp(null, {
success: function(user) { ... },
error: function(user, error) { ... }
});
API Parse
var base64 =
"V29ya2luZyBhdCBQYXJzZSBpcyBncmVhdCE=";
var file = new Parse.File("myfile.txt",
{ base64: base64 });
API Parse
var parseFile = new
Parse.File("myfile.zzz", fileData,
"image/png");
parseFile.save().then(function() {
// Imagem salva
}, function(error) {
// Ou ocorreu um erro ou a imagem não
foi enviada ao Parse
});
atwood's law
“Any application that can be written in
JavaScript, will eventually be written in
JavaScript.”
Jeff Atwood
E isso é só o começo
offlinefirst.org
nobackend.org
Isso étudo pessoal!
Obrigado!JoselitoJúnior
joselito.ninja
@joselitojunior1
Slides em: http://jfnj.me/
addnobackendoffline

noBackend e Offline First: foque em criar experiências