Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Front-End That Scales - TDC

Front-End That Scales - TDC

Matheus Azzi

October 06, 2016
Tweet

More Decks by Matheus Azzi

Other Decks in Programming

Transcript

  1. - Nossas aplicações estão mais complexas e é mais difícil

    mantê-las - Não são aplicações triviais
  2. - Um único event loop - Tamanho da base de

    código importa Front-End is Hard
  3. - Um único event loop - transpilamos nosso código para

    outra versão - Tamanho da base de código importa Front-End is Hard
  4. - Um único event loop - transpilamos nosso código para

    outra versão - Tamanho da base de código importa - Diferentes devices Front-End is Hard
  5. the app - Code base +5 anos - 63 Devs

    - 1.566 Arquivos JS (no vendor) - 5.241 JS specs - 4.428 End-to-End specs - 14.176 Back-end specs - 74.700 commits
  6. Todo código em qualquer aplicação deve parecer como se tivesse

    sido escrito por uma única pessoa, independentemente de quantas pessoas tenham contribuído. Rick Waldron Promoting Quality
  7. Promoting Quality - Pessoas vem e vão - Diferentes Skill

    sets - Compartilhe o conhecimento - Code Review
  8. USER INTERFACE APPLICATION BACK-END FRONT-END DESIGN O front-end jamais vai

    escalar se o design não escala Promoting Quality
  9. Cada alteração feita deve deixar a code base melhor que

    estava antes. Sempre aumentar a qualidade, nunca diminuir "Albert Einstein"
  10. Promoting Quality (automatizado) - Code Linters e Smells - Testes

    unitários - Testes End-to-End - code coverage
  11. └─ assets/ ├─ images/ ├─ scripts/ ├─ specs/ ├─ styles/

    └─ templates/ - Estrutura de diretórios Promoting Quality
  12. └─ assets/ ├─ images/ ├─ scripts/ ├─ specs/ ├─ styles/

    └─ templates/ └─ assets/ ├─ feature-one/ ├─ feature-two/ ├─ feature-three/ └─ common/ - Estrutura de diretórios Promoting Quality
  13. ├─ feature-one/ │ ├─ header/ │ │ ├─ header-component.js │

    │ ├─ header-component-spec.js │ │ ├─ header-ctrl-spec.js │ │ ├─ header-ctrl.js │ │ ├─ header.html │ │ └─ _header.scss │ ├─ dashboard/ │ │ └─ ' ├─ feature-two/ │ └─ ' └─ feature-tree/ └─ ' Promoting Quality
  14. Single File Components └─ components/ ├─ shared/ │ ├─ Sidebar.vue

    │ ├─ Header.vue │ ├─ Card.vue │ └─ ' ├─ shopping-cart/ │ ├─ CartBasket.vue │ ├─ CartItem.vue │ ├─ CartSummary.vue │ ├─ Checkout.vue │ └─ ' └─ feature-two/ └─ ' ( Header.vue <header class="header"> <p class="header-greeting">Hello {{username}} )p> <navigation :items="navItems"> )navigation> <user-profile> )user-profile> )header> import Navigation from './shared/Navigation' import UserProfile from './shared/UserProfile' export default { username: 'Matheus', navItems: [ { title: 'Dashboard', url: '/dashboard' }, ' ] } .header { background: #262626; } .header-greeting { font-size: 16px; } Component == HTML + JS + CSS
  15. As decisões mais importantes do projeto são tomadas no início,

    quando não sabemos muito sobre ele. Qual Ferramenta Usar?
  16. Você não pode ligar os pontos olhando pro futuro, você

    só consegue conectá-los olhando para o passado. Então você precisa acreditar quem em algum momento os pontos vão se conectar no futuro. Steve Jobs
  17. - Escolha as libs com cuidado, elas precisam continuar sendo

    mantidas - Pense no seu time, pense na curva de aprendizado - Não seja tão passional - Don't live on the edge Qual Ferramenta Usar?
  18. Feature Flagging - Staff - Early Adopters - 10% dos

    usuários - 50% dos usuários - Global Release
  19. Feature Flagging - Empregados podem mudar (on/off) essa flag a

    qualquer momento - Depois do release global a flag é removida se não for necessária
  20. { "user": { "pets": { "dogs": [ { "name": "Billy"

    }, ' ] } } } Tratamento de Erros
  21. var dogName = (user + user.pets + Array.isArray(user.pets.dogs) + user.pets.dogs.length

    > 0 + user.pets.dogs[0].name ) , 'Marley'; console.log(dogName); { "user": { "pets": { "dogs": [ { "name": "Billy" }, ' ] } } } Tratamento de Erros
  22. { "user": { "pets": { "dogs": [ { "name": "Billy"

    }, ' ] } } } Tratamento de Erros try { dogName = user.pets.dogs[0].name; } catch (e) { dogName = 'Marley'; } console.log(dogName);
  23. - Tenha um error logger window.onerror = (error, script, lineNumber)

    - { $.post('/api/errors', { error, script, lineNumber }) } Tratamento de Erros
  24. - Frequencia do erro (quantidade) - Device - Último evento

    - Qual usuário? - Stack trace Tratamento de Erros
  25. - Promova qualidade - Compartilhe o conhecimento - Automatize a

    qualidade - Mantenha um Styleguide - Component-Driven Development - Tenha processos (Code review, 1-1s, ...) - Pense em performance - Estruture por Feature - Feature Flagging - Pense como um time - Minimize os riscos - Logging, Monitore, ...