$30 off During Our Annual Pro Sale. View Details »

Lapidando o Globo Play

Lapidando o Globo Play

Estudo de caso de um produto inovador em termos de tecnologia e conceito.

Jean Carlo Emer

December 05, 2015
Tweet

More Decks by Jean Carlo Emer

Other Decks in Technology

Transcript

  1. lapidando o

    View Slide

  2. jcemer.com
    twitter.com/jcemer

    View Slide

  3. porto alegre

    View Slide

  4. Globo Play é o produto
    de vídeos da TV Globo

    View Slide

  5. View Slide

  6. View Slide

  7. View Slide

  8. View Slide

  9. O projeto
    Globo Play

    View Slide

  10. Mobile first
    Projeto

    View Slide

  11. Desktop
    2007 2008 2009 2010 2011 2012 2013 2014 2015
    Mobile
    Mobile revolution
    *Usuários em milhares

    fonte: Comscore
    2k*

    View Slide

  12. Desktop
    12AM 7AM 10AM 5PM 8PM 12AM
    Uso dos dispositivos

    ao longo do dia
    fonte: Comscore
    Mobile

    View Slide

  13. Uso de mobile web em
    relação a mobile nativo
    2013
    1.8x
    16k* x 9k
    *Unique visitors em milhares
    1.7x
    28k x 16k
    2014
    2.1x
    43k x 20k
    2015

    View Slide

  14. “It should be accessible from
    any kind of hardware that can
    connect to the internet:
    stationary or mobile, small
    screen or large
    Sir Tim Berners Lee

    View Slide

  15. Graceful degradation

    View Slide

  16. Graceful degradation
    Progressive enhancement

    View Slide

  17. Experiencia fluida
    Projeto

    View Slide

  18. “Queremos sair do paradigma
    de páginas e alcançar uma
    experiência apoiada em
    camadas
    Product Owner

    View Slide

  19. Definir o fluxo de navegação
    no produto utilizando
    JavaScript

    View Slide

  20. Ter liberdade para gerar
    diferentes empacotamentos
    e praticar testes A/B

    View Slide

  21. Server render
    Projeto

    View Slide

  22. Fugir das várias requisições
    para compor a primeira
    página

    View Slide

  23. Utilizar o mesmo código
    para o back-end e front-end
    da aplicação

    View Slide

  24. Não prejudicar o SEO do
    produto

    View Slide

  25. Cliente
    Servidor
    APP
    API

    de dados

    View Slide

  26. Tecnologias
    utilizadas

    View Slide

  27. A correta escolha de
    tecnologias faz parte de bons
    resultados

    View Slide

  28. Req
    HTML
    Click
    JSON
    Gene
    Add
    JSON
    Click
    Animate
    class
    ue
    rate
    Request
    st
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.

    View Slide

  29. Req HTML
    Click
    JSON
    Gene
    Add
    JSON
    Click
    class
    ue
    rate
    Req
    uest
    st

    View Slide

  30. As tecnologias foram
    definidas após uma série de
    experimentos

    View Slide

  31. React
    CSS
    SVG
    HTML
    MapperSmith
    jQuery
    JavaScript
    Web APIs
    React Router

    View Slide

  32. React
    Tecnologias

    View Slide

  33. O DOM não é performático
    quando aplicamos
    modificações a revelia

    View Slide

  34. “A solução é escrever código
    como se recriasse o DOM toda
    vez que o estado muda
    Time do Virtual DOM

    View Slide

  35. var newTree = render(data)
    var patches = diff(tree, newTree)
    rootNode = patch(rootNode, patches)
    tree = newTree

    View Slide

  36. Componentes de
    software encapsulam uma
    série de funcionalidades
    relacionadas

    View Slide

  37. Componentes podem ser
    compostos para formar um
    sistema mais complexo

    View Slide

  38. React permite encapsular,
    compor e reusar código na
    plataforma Web

    View Slide

  39. Componentes do React
    mantêm estado e recebem
    propriedades dos seus
    ancestrais

    View Slide

  40. Set state Dirty Re render

    View Slide

  41. MapperSmith
    Tecnologias

    View Slide

  42. Internet
    Rede interna
    Cliente
    Servidor
    APP
    API

    de dados

    View Slide

  43. Lightweight, isomorphic,
    dependency-free, REST client
    mapper for JavaScript
    https://github.com/tulios/mappersmith

    View Slide

  44. var manifest = {

    host: 'http://my.api.com',
    resources: {
    Book: {
    all: {path: '/books.json'},
    byId: {path: '/books/{id}.json'}
    },
    Photo: {
    byCategory: {path: '/photos/{category}.json'}
    }
    }
    }

    View Slide

  45. Internet
    Rede interna
    API

    de dados
    $.ajax
    require('http')

    View Slide

  46. Mappersmith cached
    gateway permite utilizar
    LocalStorage e Redis para
    economizar requisições
    https://github.com/tulios/mappersmith-cached-gateway

    View Slide

  47. Servicos
    consumidos

    View Slide

  48. O Globo Play é a
    consolidação do trabalho de
    várias equipes da globo.com

    View Slide

  49. Acervo de vídeos e programas
    API de vídeos
    Localização do usuário e
    informações sobre o sinal de ao vivo
    API de live

    View Slide

  50. Identificação do usuário
    Serviço de login
    Comentários
    Recomendação de

    conteúdo

    View Slide

  51. Destaques editoriais
    Área administrativa
    Elastic Search
    Acervo de vídeos e programas
    para busca

    View Slide

  52. Player com suporte a publicidade e
    integração com diversas APIs
    Player de vídeo

    View Slide

  53. Desafios
    enfrentados

    View Slide

  54. 1Organizar código em
    componentes

    View Slide

  55. “A container does data
    fetching and then renders its
    corresponding sub-
    component. That’s it.
    Jason Bonta
    https://medium.com/@dan_abramov/smart-and-dumb-
    components-7ca2f9a7c7d0

    View Slide

  56. Componentes puros
    dependem apenas de
    propriedades e estado para
    renderizar

    View Slide

  57. O escopo de responsabilidade
    dos componentes é
    constantemente revisto

    View Slide

  58. 2Compreender o ciclo de
    vida dos componentes

    View Slide

  59. http://busypeoples.github.io/post/react-component-lifecycle
    Inicialização

    View Slide

  60. Alteração do estado

    View Slide

  61. Alteração de propriedades

    View Slide

  62. Os componentes são
    evoluídos ao longo do
    desenvolvimento

    View Slide

  63. 3Entregar a melhor
    experiência para todos
    os dispositivos

    View Slide

  64. Maior que 1200px
    Até 1024px Até 768px

    View Slide

  65. Media Queries são utilizadas
    no CSS e JavaScript para
    garantir a melhor experiência

    View Slide

  66. 4Utilizar apenas plugins
    de interface compatíveis
    com React

    View Slide

  67. React headroom
    React slick
    React smartbanner
    React swipeable

    View Slide

  68. O ecossistema do React é
    emergente e é preciso ficar
    antenado para adotar novas
    bibliotecas

    View Slide

  69. 5Testar o código dos
    componentes

    View Slide

  70. Experimentamos Jasmine,
    Karma, Jest, Sinon, Rewire...

    View Slide

  71. Jest é utilizado para os
    testes, mas é lento e tem uma
    filosofia controversa

    View Slide

  72. Mocha + expect +
    shallow render juntos
    parecem uma ótima
    alternativa
    https://blog.algolia.com/how-we-unit-test-react-
    components-using-expect-jsx

    View Slide

  73. 6Gerenciar estados
    globais da aplicação

    View Slide

  74. Serviços com auxílio de
    mixins compartilham estado
    entre componentes

    View Slide

  75. 7Integrar com serviços
    externos

    View Slide

  76. Cada serviço externo precisa
    ser analisado e integrado a
    aplicação

    View Slide

  77. 8Lidar com a imaturidade
    das bibliotecas

    View Slide

  78. Algumas adequações
    precisam ser feitas no código
    do produto

    View Slide

  79. 9Evoluir as tecnologias
    utilizadas

    View Slide

  80. Novas versões do React e
    outras dependências
    surgiram ao longo do tempo
    de desenvolvimento

    View Slide

  81. Migramos para a última
    versão do React
    recentemente

    View Slide

  82. É necessário viabilizar a
    evolução do React Router e
    outras dependências

    View Slide

  83. Mixins estão com os dias
    contados, é preciso dar
    atenção a arquitetura Flux e
    ao Redux

    View Slide

  84. ...

    View Slide

  85. Ruby on Rails
    Bluegreen deploy
    New Relic
    Storage de assets
    Webpack

    View Slide

  86. Novos desafios surgem a
    todo momento e este é o
    maior barato da nossa
    profissão

    View Slide

  87. Resultado
    do projeto

    View Slide

  88. View Slide

  89. View Slide

  90. View Slide

  91. View Slide

  92. “Se o nível de mudança
    interno está aquém do
    externo, o colapso é
    iminente
    Jack Welch

    View Slide

  93. Obrigado
    apostem na web
    @jcemer

    View Slide