SlideShare una empresa de Scribd logo
1 de 37
http://andrebaltieri.net/
HEY!SEU WORKSHOP JÁ VAI
COMEÇAR
INÍCIO PROGRAMADO PARA
20:30
UTILIZE O
CHATA SUA DIREITA PARA
SE COMUNICAR
http://andrebaltieri.net/
Workshop
Otimizando Frontends
Agenda
Contexto 1 – Web
Entendendo o Request/Response
Deficiências do Browser
Requisição é requisição! Ponto!
Analise seus acessos
Contexto 2 – Desenvolvimento
Organização
PageSpeed Insights
Imagens vs Fonts
Thumbnails
Bundle/Minification
Cache
Contexto 3 – Infraestrutura
Static File Server ou App?
Cache
Cache vs Versionamento
Distribuição de Imagens (Banco vs
Arquivo)
CDN
Contexto 4 – Automação
Bower
Gulp e Grunt
Web
Entendendo o Request/Response
Deficiências do Browser
Requisição é requisição! Ponto!
Analise seus acessos
Entendendo o Req/Res
 Request
 Toda requisição feita ao servidor
 Response
 Resposta do servidor a requisição
 Tipos de Resposta
 HTML
 JSON
 Imagem
 Texto
 Etc...
Deficiências
 O browser possui um limite de requisições simultâneas (Isto vai
mudar no HTTP 2.0)
 Quanto mais requisições sua página fizer, mais lenta será
 Quanto mais imagens, mais lenta
 Quanto mais arquivos CSS, JS, mais lenta
 Similar a cópia de arquivos nos SOs
Sobre Requisições
 Uma requisição é uma requisição! Não importa se o retorno é um
HTML, um JSON, uma Imagem, etc...
 Se seu frontend está na mesma aplicação da sua API, além de
fornecer seus arquivos “HTML” sua aplicação também tem que
“ouvir” as requisições do seu serviço.
 Eles vão disputar a atenção
Analise seu tráfego
 Quantos usuários/acessos sua aplicação recebe?
 Destes, quantos são novos? Por que isto importa?
 Sua aplicação escala automático?
 Se sim, por que me preocupar com performance?
Desenvolvimento
Organize seu código
PageSpeed Insights
Imagens vs Fonts
Thumbnails
Bundle/Minification
Cache
Organize seu código
 Separe seu CSS/JS em arquivos
 CSS no topo
 JS no fim da página
 Evite JS no “meio” das páginas
 A semântica correta do HTML também ajuda
 Evite CSS “inline”
PageSpeed Insights
 Ferramenta que fornece informações sobre sua página
 https://developers.google.com/speed/pagespeed/insights/
 Já mostra as possíveis soluções para os problemas encontrados
 Não entre em pânico!
Imagens VS Fonts
 Minha aplicação tem muitos ícones, como proceder?
 Fontes são sempre a melhor opção?
 E os SVG?
 Quais opções temos?
 Font-awesome
 Material Icons
Imagens
 Minha aplicação tem muitas imagens, como proceder?
 Gere thumbnails das suas imagens
 Posso gerar thumbs dinamicamente?
 Sim, mas muita calma nesta hora!
 É interessante trabalhar com Sprites?
Bundle/Minification
 Se quanto mais arquivos, mais requisições e quanto mais requisições
mais lento....
 Por que não juntar todos os arquivos CSS/JS em um único arquivo?
 Minifique os arquivos! O browser não precisa de espaços e quebras
de linha!
Cache (Client)
 Existem dois tipos de cache
 Server Side
 Client Side
 Cache padrão do HTML
 Cache Manifest
 https://developer.mozilla.org/pt-
BR/docs/Web/HTML/Using_the_application_cache
Infraestrutura
Static File Server ou App?
Cache
Cache vs Versionamento
Distribuição de Imagens
CDN
Static vs App Server
 Sendo sua aplicação somente HTML, CSS e JS, ela pode ser
armazenada em um servidor de arquivos estáticos
 Arquivos estáticos podem ser servidos mais rapidamente
 São melhores cacheados
 Impossibilita técnicas de bootstrap, cache do lado do servidor,
otimização do SEO por parte do servidor e afins
Cache (Server)
 Existem servidores que tratam o cacheamento da sua aplicação
 Redis
 Memcache
 Squid
 etc..
Versão
 Se meus arquivos serão cacheados, o que acontece quando eu subir
uma nova versão deles?
 Que tal versionar seus arquivos?
 scripts-1.0.0.min.js
 styles-1.0.0.min.css
 logo_300x300-1.0.0.png
 Mudando o nome do arquivo, a atualização é automática
 Cuidado, isto pode impactar as requisições no seu servidor!
Distribuição de Imagens
 Junto a sua aplicação (Arquivos estáticos)
 Em base64 armazenada no banco de dados
 Em um servidor separado (Só para imagens)
 Em um servidor separado (Cacheando)
 Via CDN
CDN
 Content Delivery Network
 Otimiza a entrega de arquivos estáticos “espalhando-os” por vários
servidores pelo mundo
 O usuário sempre acessa o arquivo no servidor mais próximo
 Quanto mais servidores, melhor
 Não é tão barato
Automação
Otimizando seu desenvolvimento
Bower
Grunt
Gulp
Otimizando o Dev
 O que faço com todas as dependências da minha aplicação?
 Toda vez tenho que minificar meus arquivos?
 Como preparo minha aplicação para publicação?
Bower
 Faz a gestão de todos os pacotes que sua aplicação usa e que não são
servidos via CDN
 Utilize o Bower para gerenciar seus pacotes. Evite fazer o download
direto dos sites
 Ele versiona os pacotes e promove a facilidade da concentração das
dependências em um repositório. Isto ajuda no trabalho em equipe
 http://bower.io/
Grunt
 Automatiza tarefas como cópia de imagens, minificação, junção de
arquivos
 Você pode deixar tudo pré-configurado e fazer seu pacote para
deploy com apenas um comando
 Utiliza JavaScript como linguagem 
 http://gruntjs.com/
Gulp
 Realiza tudo que o Grunt faz, mas tem alguns pontos muito
interessantes
 gulp-webserver
 gulp-watch
 gulp-notify
 http://gulpjs.com/
Dúvidas
OBRI
GADO
Otimizando Frontends em
Otimizando Frontends em

Más contenido relacionado

Similar a Otimizando Frontends em

Boas Práticas em Aplicações Silverlight 2
Boas Práticas em Aplicações Silverlight 2Boas Práticas em Aplicações Silverlight 2
Boas Práticas em Aplicações Silverlight 2sagostinho
 
Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013Guga Alves
 
Introdução ao CSS - Desenvolvimento web
Introdução ao CSS - Desenvolvimento webIntrodução ao CSS - Desenvolvimento web
Introdução ao CSS - Desenvolvimento webCarlos Eduardo Kadu
 
Otimização Front-end para WordPress
Otimização Front-end para WordPressOtimização Front-end para WordPress
Otimização Front-end para WordPressGuga Alves
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemRodrigo Valerio
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
PHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHPPHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHPFlávio Lisboa
 
Precisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesPrecisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesJackson F. de A. Mafra
 
Performance - Acelere seu site! Na web tempo é mais que dinheiro.
Performance - Acelere seu site! Na web tempo é mais que dinheiro.Performance - Acelere seu site! Na web tempo é mais que dinheiro.
Performance - Acelere seu site! Na web tempo é mais que dinheiro.Gustavo Corrêa Alves
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sitesthiagolima
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento webRodrigo Rodrigues
 
Web Tools Pt B R
Web Tools Pt  B RWeb Tools Pt  B R
Web Tools Pt B Rguestb9d145
 
Performance e otimização no wordpress
Performance e otimização no wordpressPerformance e otimização no wordpress
Performance e otimização no wordpressDaniel Paz
 
Arquitetura Web Desacoplada - FCI/Mackenzie
Arquitetura Web Desacoplada - FCI/MackenzieArquitetura Web Desacoplada - FCI/Mackenzie
Arquitetura Web Desacoplada - FCI/MackenzieVivaldo Jose Breternitz
 
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.pptxMarceloRosenbrock1
 
Desenvolvendo para o Windows Azure e SQL Azure
Desenvolvendo para o Windows Azure e SQL AzureDesenvolvendo para o Windows Azure e SQL Azure
Desenvolvendo para o Windows Azure e SQL AzureLuciano Condé
 

Similar a Otimizando Frontends em (20)

Boas Práticas em Aplicações Silverlight 2
Boas Práticas em Aplicações Silverlight 2Boas Práticas em Aplicações Silverlight 2
Boas Práticas em Aplicações Silverlight 2
 
Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013
 
Introdução ao CSS - Desenvolvimento web
Introdução ao CSS - Desenvolvimento webIntrodução ao CSS - Desenvolvimento web
Introdução ao CSS - Desenvolvimento web
 
Otimização Front-end para WordPress
Otimização Front-end para WordPressOtimização Front-end para WordPress
Otimização Front-end para WordPress
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvem
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
PHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHPPHP Papa-Léguas: Performance em PHP
PHP Papa-Léguas: Performance em PHP
 
Precisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesPrecisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicações
 
Performance - Acelere seu site! Na web tempo é mais que dinheiro.
Performance - Acelere seu site! Na web tempo é mais que dinheiro.Performance - Acelere seu site! Na web tempo é mais que dinheiro.
Performance - Acelere seu site! Na web tempo é mais que dinheiro.
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sites
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
 
Web Tools Pt B R
Web Tools Pt  B RWeb Tools Pt  B R
Web Tools Pt B R
 
Performance e otimização no wordpress
Performance e otimização no wordpressPerformance e otimização no wordpress
Performance e otimização no wordpress
 
Web Dev Camp
Web Dev CampWeb Dev Camp
Web Dev Camp
 
PHP 10 CodeIgniter
PHP 10 CodeIgniterPHP 10 CodeIgniter
PHP 10 CodeIgniter
 
Arquitetura Web Desacoplada - FCI/Mackenzie
Arquitetura Web Desacoplada - FCI/MackenzieArquitetura Web Desacoplada - FCI/Mackenzie
Arquitetura Web Desacoplada - FCI/Mackenzie
 
XPT Framework
XPT FrameworkXPT Framework
XPT Framework
 
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
 
Desenvolvendo para o Windows Azure e SQL Azure
Desenvolvendo para o Windows Azure e SQL AzureDesenvolvendo para o Windows Azure e SQL Azure
Desenvolvendo para o Windows Azure e SQL Azure
 
Web Offline
Web OfflineWeb Offline
Web Offline
 

Más de Andre Baltieri

Clean Code - Promob DevDay 2022
Clean Code - Promob DevDay 2022Clean Code - Promob DevDay 2022
Clean Code - Promob DevDay 2022Andre Baltieri
 
31/08/2019 - Flutter Talks
31/08/2019 - Flutter Talks31/08/2019 - Flutter Talks
31/08/2019 - Flutter TalksAndre Baltieri
 
Refatorando para Testes de Unidade
Refatorando para Testes de UnidadeRefatorando para Testes de Unidade
Refatorando para Testes de UnidadeAndre Baltieri
 
Criando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptCriando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptAndre Baltieri
 
Otimizando seu cenário de APIs
Otimizando seu cenário de APIsOtimizando seu cenário de APIs
Otimizando seu cenário de APIsAndre Baltieri
 
Turbine sua API no Microsoft Azure
Turbine sua API no Microsoft AzureTurbine sua API no Microsoft Azure
Turbine sua API no Microsoft AzureAndre Baltieri
 
Progressive Web Apps: Um novo mundo
Progressive Web Apps: Um novo mundoProgressive Web Apps: Um novo mundo
Progressive Web Apps: Um novo mundoAndre Baltieri
 
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsAndre Baltieri
 
Migrando para o Angular 2
Migrando para o Angular 2Migrando para o Angular 2
Migrando para o Angular 2Andre Baltieri
 
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NETProgressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NETAndre Baltieri
 
Otimizando eu JavaScript com TypeScript
Otimizando eu JavaScript com TypeScriptOtimizando eu JavaScript com TypeScript
Otimizando eu JavaScript com TypeScriptAndre Baltieri
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e AlémAndre Baltieri
 
Introdução ao Native Script
Introdução ao Native ScriptIntrodução ao Native Script
Introdução ao Native ScriptAndre Baltieri
 
Criando aplicações Híbridas com AngularJs, TypeScript e Material Design
Criando aplicações Híbridas com AngularJs, TypeScript e Material DesignCriando aplicações Híbridas com AngularJs, TypeScript e Material Design
Criando aplicações Híbridas com AngularJs, TypeScript e Material DesignAndre Baltieri
 
Trabalhando com WebHooks no ASP.NET
Trabalhando com WebHooks no ASP.NETTrabalhando com WebHooks no ASP.NET
Trabalhando com WebHooks no ASP.NETAndre Baltieri
 
Microsoft e o mundo do Desenvolvimento
Microsoft e o mundo do DesenvolvimentoMicrosoft e o mundo do Desenvolvimento
Microsoft e o mundo do DesenvolvimentoAndre Baltieri
 

Más de Andre Baltieri (20)

Clean Code - Promob DevDay 2022
Clean Code - Promob DevDay 2022Clean Code - Promob DevDay 2022
Clean Code - Promob DevDay 2022
 
31/08/2019 - Flutter Talks
31/08/2019 - Flutter Talks31/08/2019 - Flutter Talks
31/08/2019 - Flutter Talks
 
Refatorando para Testes de Unidade
Refatorando para Testes de UnidadeRefatorando para Testes de Unidade
Refatorando para Testes de Unidade
 
PWA: State of Art
PWA: State of ArtPWA: State of Art
PWA: State of Art
 
PWAs no seu Desktop
PWAs no seu DesktopPWAs no seu Desktop
PWAs no seu Desktop
 
Criando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptCriando APIs com Node e TypeScript
Criando APIs com Node e TypeScript
 
Otimizando seu cenário de APIs
Otimizando seu cenário de APIsOtimizando seu cenário de APIs
Otimizando seu cenário de APIs
 
Turbine sua API no Microsoft Azure
Turbine sua API no Microsoft AzureTurbine sua API no Microsoft Azure
Turbine sua API no Microsoft Azure
 
Progressive Web Apps: Um novo mundo
Progressive Web Apps: Um novo mundoProgressive Web Apps: Um novo mundo
Progressive Web Apps: Um novo mundo
 
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance TipsASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance Tips
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
Migrando para o Angular 2
Migrando para o Angular 2Migrando para o Angular 2
Migrando para o Angular 2
 
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NETProgressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
 
BaaS com Firebase 3
BaaS com Firebase 3BaaS com Firebase 3
BaaS com Firebase 3
 
Otimizando eu JavaScript com TypeScript
Otimizando eu JavaScript com TypeScriptOtimizando eu JavaScript com TypeScript
Otimizando eu JavaScript com TypeScript
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e Além
 
Introdução ao Native Script
Introdução ao Native ScriptIntrodução ao Native Script
Introdução ao Native Script
 
Criando aplicações Híbridas com AngularJs, TypeScript e Material Design
Criando aplicações Híbridas com AngularJs, TypeScript e Material DesignCriando aplicações Híbridas com AngularJs, TypeScript e Material Design
Criando aplicações Híbridas com AngularJs, TypeScript e Material Design
 
Trabalhando com WebHooks no ASP.NET
Trabalhando com WebHooks no ASP.NETTrabalhando com WebHooks no ASP.NET
Trabalhando com WebHooks no ASP.NET
 
Microsoft e o mundo do Desenvolvimento
Microsoft e o mundo do DesenvolvimentoMicrosoft e o mundo do Desenvolvimento
Microsoft e o mundo do Desenvolvimento
 

Otimizando Frontends em

  • 1. http://andrebaltieri.net/ HEY!SEU WORKSHOP JÁ VAI COMEÇAR INÍCIO PROGRAMADO PARA 20:30
  • 2. UTILIZE O CHATA SUA DIREITA PARA SE COMUNICAR http://andrebaltieri.net/
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 10. Agenda Contexto 1 – Web Entendendo o Request/Response Deficiências do Browser Requisição é requisição! Ponto! Analise seus acessos Contexto 2 – Desenvolvimento Organização PageSpeed Insights Imagens vs Fonts Thumbnails Bundle/Minification Cache Contexto 3 – Infraestrutura Static File Server ou App? Cache Cache vs Versionamento Distribuição de Imagens (Banco vs Arquivo) CDN Contexto 4 – Automação Bower Gulp e Grunt
  • 11. Web Entendendo o Request/Response Deficiências do Browser Requisição é requisição! Ponto! Analise seus acessos
  • 12. Entendendo o Req/Res  Request  Toda requisição feita ao servidor  Response  Resposta do servidor a requisição  Tipos de Resposta  HTML  JSON  Imagem  Texto  Etc...
  • 13. Deficiências  O browser possui um limite de requisições simultâneas (Isto vai mudar no HTTP 2.0)  Quanto mais requisições sua página fizer, mais lenta será  Quanto mais imagens, mais lenta  Quanto mais arquivos CSS, JS, mais lenta  Similar a cópia de arquivos nos SOs
  • 14. Sobre Requisições  Uma requisição é uma requisição! Não importa se o retorno é um HTML, um JSON, uma Imagem, etc...  Se seu frontend está na mesma aplicação da sua API, além de fornecer seus arquivos “HTML” sua aplicação também tem que “ouvir” as requisições do seu serviço.  Eles vão disputar a atenção
  • 15. Analise seu tráfego  Quantos usuários/acessos sua aplicação recebe?  Destes, quantos são novos? Por que isto importa?  Sua aplicação escala automático?  Se sim, por que me preocupar com performance?
  • 16. Desenvolvimento Organize seu código PageSpeed Insights Imagens vs Fonts Thumbnails Bundle/Minification Cache
  • 17. Organize seu código  Separe seu CSS/JS em arquivos  CSS no topo  JS no fim da página  Evite JS no “meio” das páginas  A semântica correta do HTML também ajuda  Evite CSS “inline”
  • 18. PageSpeed Insights  Ferramenta que fornece informações sobre sua página  https://developers.google.com/speed/pagespeed/insights/  Já mostra as possíveis soluções para os problemas encontrados  Não entre em pânico!
  • 19. Imagens VS Fonts  Minha aplicação tem muitos ícones, como proceder?  Fontes são sempre a melhor opção?  E os SVG?  Quais opções temos?  Font-awesome  Material Icons
  • 20. Imagens  Minha aplicação tem muitas imagens, como proceder?  Gere thumbnails das suas imagens  Posso gerar thumbs dinamicamente?  Sim, mas muita calma nesta hora!  É interessante trabalhar com Sprites?
  • 21. Bundle/Minification  Se quanto mais arquivos, mais requisições e quanto mais requisições mais lento....  Por que não juntar todos os arquivos CSS/JS em um único arquivo?  Minifique os arquivos! O browser não precisa de espaços e quebras de linha!
  • 22. Cache (Client)  Existem dois tipos de cache  Server Side  Client Side  Cache padrão do HTML  Cache Manifest  https://developer.mozilla.org/pt- BR/docs/Web/HTML/Using_the_application_cache
  • 23. Infraestrutura Static File Server ou App? Cache Cache vs Versionamento Distribuição de Imagens CDN
  • 24. Static vs App Server  Sendo sua aplicação somente HTML, CSS e JS, ela pode ser armazenada em um servidor de arquivos estáticos  Arquivos estáticos podem ser servidos mais rapidamente  São melhores cacheados  Impossibilita técnicas de bootstrap, cache do lado do servidor, otimização do SEO por parte do servidor e afins
  • 25. Cache (Server)  Existem servidores que tratam o cacheamento da sua aplicação  Redis  Memcache  Squid  etc..
  • 26. Versão  Se meus arquivos serão cacheados, o que acontece quando eu subir uma nova versão deles?  Que tal versionar seus arquivos?  scripts-1.0.0.min.js  styles-1.0.0.min.css  logo_300x300-1.0.0.png  Mudando o nome do arquivo, a atualização é automática  Cuidado, isto pode impactar as requisições no seu servidor!
  • 27. Distribuição de Imagens  Junto a sua aplicação (Arquivos estáticos)  Em base64 armazenada no banco de dados  Em um servidor separado (Só para imagens)  Em um servidor separado (Cacheando)  Via CDN
  • 28. CDN  Content Delivery Network  Otimiza a entrega de arquivos estáticos “espalhando-os” por vários servidores pelo mundo  O usuário sempre acessa o arquivo no servidor mais próximo  Quanto mais servidores, melhor  Não é tão barato
  • 30. Otimizando o Dev  O que faço com todas as dependências da minha aplicação?  Toda vez tenho que minificar meus arquivos?  Como preparo minha aplicação para publicação?
  • 31. Bower  Faz a gestão de todos os pacotes que sua aplicação usa e que não são servidos via CDN  Utilize o Bower para gerenciar seus pacotes. Evite fazer o download direto dos sites  Ele versiona os pacotes e promove a facilidade da concentração das dependências em um repositório. Isto ajuda no trabalho em equipe  http://bower.io/
  • 32. Grunt  Automatiza tarefas como cópia de imagens, minificação, junção de arquivos  Você pode deixar tudo pré-configurado e fazer seu pacote para deploy com apenas um comando  Utiliza JavaScript como linguagem   http://gruntjs.com/
  • 33. Gulp  Realiza tudo que o Grunt faz, mas tem alguns pontos muito interessantes  gulp-webserver  gulp-watch  gulp-notify  http://gulpjs.com/