24
Single Page Applications A nova Web Giovanni Bassi [email protected] @giovannibassi Victor Cavalcante [email protected] .br @vcavalcante

Sigle Page Application - A nova Web

Embed Size (px)

DESCRIPTION

Palestra apresentada no TDC2013SP.

Citation preview

Page 1: Sigle Page Application - A nova Web

Single Page Applications A nova Web

Giovanni [email protected]

@giovannibassi

Victor [email protected]

@vcavalcante

Page 2: Sigle Page Application - A nova Web

@VCavalcante

@GiovanniBassi

Page 3: Sigle Page Application - A nova Web
Page 4: Sigle Page Application - A nova Web
Page 5: Sigle Page Application - A nova Web

Agenda

História Tecnologias Novo workflow de desenvolvimento

Arquitetura da nova web

Testando na nova web

Responsabilidades do servidor web

Manifesto da Nova Web

Competências do “novo”

desenvolvedor web

Oportunidades e desafios no novo

modelo

Page 6: Sigle Page Application - A nova Web

História

HTML estático

HTML dinâmico

Outlook Web Access, XMLHttpRequest e AJAX

??

Page 7: Sigle Page Application - A nova Web

Tecnologias

.htm

CGI

PHP/ASP/Code Fusion

Webforms, JSF

Ruby on Rails, ASP.NET MVC, Play Framework

Sinatra, Nancy, ASP.NET Web API

MeteorJS, NodeJS,Vert.X,scriptcs

Page 8: Sigle Page Application - A nova Web

Novo workflow de desenvolvimento

• Navegação: – URI => HTML base– URI => Javascript => Ação (HTML/Javascript/CSS)

• Que dado vou obter agora?• Qual interface gráfica exibo agora?• O usuário está logado?

Page 9: Sigle Page Application - A nova Web

Arquitetura da nova web• Camadas no navegador (HTML, CSS e JS)• Arquitetura no servidor

Page 10: Sigle Page Application - A nova Web

Frameworks para construção de SPA’s

Page 11: Sigle Page Application - A nova Web

Testando na nova web• Servidor web: old news• No browser:

– Jasmine– Mocha– QUnit– Selenium– Watin

Page 12: Sigle Page Application - A nova Web

describe "carrega cidades do servico e exibe no dropdown", -> it "exibe as cidades no dropdown", -> #arrange setFixtures("<form> <select id='UF' name='UF'><option selected='selected'>Estado</option><option>RJ</option></select><select id='Cidade' name='Cidade'><option selected='selected'>Cidade</option></select></form>")    url = ''    spyOn($, "ajax").andCallFake((options) ->       url = options.url      options.success(['Rio de Janeiro']))    #act    $('#UF').val('RJ').attr('selected','selected')    $('#UF').trigger('change')    #assert    expect(url).toEqual '/api/cadastro/UF/RJ/Cidades'    expect($('#Cidade option').length).toEqual(3)    expect($('#Cidade option:selected')[0].text).toEqual('Selecione uma cidade')    expect($('#Cidade option')[0].text).toEqual('Selecione uma cidade')    expect($('#Cidade option')[1].text).toEqual('Rio de Janeiro')

Jasmine

Page 13: Sigle Page Application - A nova Web

describe "carrega cidades do servico e exibe no dropdown", -> it "exibe as cidades no dropdown", -> #arrange setFixtures("<form> <select id='UF' name='UF'><option selected='selected'>Estado</option><option>RJ</option></select><select id='Cidade' name='Cidade'><option selected='selected'>Cidade</option></select></form>")    url = ''    spyOn($, "ajax").andCallFake((options) ->       url = options.url      options.success(['Rio de Janeiro']))    #act    $('#UF').val('RJ').attr('selected','selected')    $('#UF').trigger('change')    #assert    expect(url).toEqual '/api/cadastro/UF/RJ/Cidades'    expect($('#Cidade option').length).toEqual(3)    expect($('#Cidade option:selected')[0].text).toEqual('Selecione uma cidade')    expect($('#Cidade option')[0].text).toEqual('Selecione uma cidade')    expect($('#Cidade option')[1].text).toEqual('Rio de Janeiro')

Jasmine

Page 14: Sigle Page Application - A nova Web

describe "carrega cidades do servico e exibe no dropdown", -> it "exibe as cidades no dropdown", -> #arrange setFixtures("<form> <select id='UF' name='UF'><option selected='selected'>Estado</option><option>RJ</option></select><select id='Cidade' name='Cidade'><option selected='selected'>Cidade</option></select></form>")    url = ''    spyOn($, "ajax").andCallFake((options) ->       url = options.url      options.success(['Rio de Janeiro']))    #act    $('#UF').val('RJ').attr('selected','selected')    $('#UF').trigger('change')    #assert    expect(url).toEqual '/api/cadastro/UF/RJ/Cidades'    expect($('#Cidade option').length).toEqual(3)    expect($('#Cidade option:selected')[0].text).toEqual('Selecione uma cidade')    expect($('#Cidade option')[0].text).toEqual('Selecione uma cidade')    expect($('#Cidade option')[1].text).toEqual('Rio de Janeiro')

Jasmine

Page 15: Sigle Page Application - A nova Web

describe "carrega cidades do servico e exibe no dropdown", -> it "exibe as cidades no dropdown", -> #arrange setFixtures("<form> <select id='UF' name='UF'><option selected='selected'>Estado</option><option>RJ</option></select><select id='Cidade' name='Cidade'><option selected='selected'>Cidade</option></select></form>")    url = ''    spyOn($, "ajax").andCallFake((options) ->       url = options.url      options.success(['Rio de Janeiro']))    #act    $('#UF').val('RJ').attr('selected','selected')    $('#UF').trigger('change')    #assert    expect(url).toEqual '/api/cadastro/UF/RJ/Cidades'    expect($('#Cidade option').length).toEqual(3)    expect($('#Cidade option:selected')[0].text).toEqual('Selecione uma cidade')    expect($('#Cidade option')[0].text).toEqual('Selecione uma cidade')    expect($('#Cidade option')[1].text).toEqual('Rio de Janeiro')

Jasmine

Page 16: Sigle Page Application - A nova Web

Responsabilidades do servidor web

• Não precisa mais gerar HTML• Não precisa mais manter estado• Não precisa mais se conectar em todos os serviços que

atendem a aplicação

Quais suas novas responsabilidades?

Page 17: Sigle Page Application - A nova Web

Manifesto da Nova Web• Menos C#/Ruby/Java/Python, mais Javascript (ou

CoffeeScript)• Menos arrastar e soltar, mais HTML codificado à mão• Menos poluição no HTML, mais CSS• Menos uso do HTML para design, mais foco na semântica• Mais Javascript, mais opções ao Javascript (Coffeescript)

Page 18: Sigle Page Application - A nova Web

Competências do “novo” desenvolvedor web

• HTML5• CSS3• JavaScript / CoffeeScript• HTTP 1.1• Web Standards• REST• Linguagem do lado do servidor

Page 19: Sigle Page Application - A nova Web

Oportunidades no novo modelo• Desenvolvimento mobile facilitado• Consumo de conteúdo desconectado

– Local Storage– Cache Manifest– Sincronização

• Sensação de maior responsividade da aplicação• SPAs• Convergência tecnológica

Page 20: Sigle Page Application - A nova Web

Desafios do novo modelo• Falta de conhecimento dos desenvolvedores• Medo• Ferramental ainda em evolução• Segurança garantida no server side• Código exposto no cliente

Page 21: Sigle Page Application - A nova Web

Você é desenvolvedor web? Continuará sendo nos próximos anos com o conhecimento atual?

Page 22: Sigle Page Application - A nova Web

Dúvidas?

Page 23: Sigle Page Application - A nova Web

Obrigado!

Giovanni [email protected]

@giovannibassi

Victor [email protected]

@vcavalcante

Page 24: Sigle Page Application - A nova Web

www.lambda3.com.br

Days 2012