53
WPO Web Performance Optimization com .NET Core Rodolfo Fadino

DevXperience WPO com .NET CORE

Embed Size (px)

Citation preview

Page 1: DevXperience WPO com .NET CORE

WPO Web Performance Optimizationcom .NET Core

Rodolfo Fadino

Page 2: DevXperience WPO com .NET CORE

Eric Schurman (Amazon)Jake Brutlag (Google)

Distin

ct Q

uerie

s/Use

r

Query R

efin

emen

t

Revenue/

User

Any Clic

ks

Satis

fact

ion

Tim

e to

Clic

k

(incr

esase

in m

s)

50ms - - - - - -

200ms - - - -0,30% -0,40% 500

500ms - -0,60% -1,20% -1,00% -0,90% 1200

1000ms -0,70% -0,90% -2,80% -1,90% -1,60% 1900

2000ms -1,80% -2,10% -4,30% -4,40% -3,80% 3100

https://conferences.oreilly.com/velocity/velocity2009/public/schedule/detail/8523

Performance é importante?

Page 3: DevXperience WPO com .NET CORE

http://kylerush.net/blog/meet-the-obama-campaigns-250-million-fundraising-platform/

Page 4: DevXperience WPO com .NET CORE

Performance = soma de fatores

Back-End

• Cache

• Thread

• Debug/Release

• SQL

• IO

• Network

• ...

Front-End

• CSS

• JS

• IMG

• Headers

• Minified

• CDN

• Proxy

• Cookies

• ...

Page 5: DevXperience WPO com .NET CORE

“…only 10-20% of the total end-user response time is spent getting the HTML document to the browser. You need to focus on the other 80-90% if you want to make your pages noticeably faster…”

Steve Souders

Page 6: DevXperience WPO com .NET CORE

14 regras• Rule 1 - Make Fewer HTTP Requests

• Rule 2 - Use a Content Delivery Network

• Rule 3 - Add an Expires Header

• Rule 4 - Gzip Components

• Rule 5 - Put Stylesheets at the Top

• Rule 6 - Put Scripts at the Bottom

• Rule 7 - Avoid CSS Expressions

• Rule 8 - Make JavaScript and CSS External

• Rule 9 - Reduce DNS Lookups

• Rule 10 - Minify JavaScript

• Rule 11 - Avoid Redirects

• Rule 12 - Remove Duplicate Scripts

• Rule 13 - Configure ETags

• Rule 14 - Make AJAX Cacheable

Page 7: DevXperience WPO com .NET CORE

Request e Response

Page 8: DevXperience WPO com .NET CORE

Anatomia de uma Requisição HTTP

• DNS Lookup

• Initial Connection• Keep-Alive Header

• Time to First Byte

• Content Download

Page 9: DevXperience WPO com .NET CORE

329 requests

Page 10: DevXperience WPO com .NET CORE
Page 11: DevXperience WPO com .NET CORE

Cache

Page 12: DevXperience WPO com .NET CORE

“O código mais rápido é aquele que não é

executado” (adaptação)

Memory Cache

Page 13: DevXperience WPO com .NET CORE
Page 14: DevXperience WPO com .NET CORE
Page 15: DevXperience WPO com .NET CORE
Page 16: DevXperience WPO com .NET CORE
Page 17: DevXperience WPO com .NET CORE
Page 18: DevXperience WPO com .NET CORE

Sem Cache

Com Cache

Page 19: DevXperience WPO com .NET CORE

Client Cache

Page 20: DevXperience WPO com .NET CORE

Headers

Expires serve para definirmos a data em que aquele recurso irá expirar (ex: Expires: Thu, 21 Dec2013 16:00:00 GMT).

Cache-Control serve para definirmos por quanto tempo (em segundos) aquele recurso irá permanecer válido no navegador do cliente

Page 21: DevXperience WPO com .NET CORE

GET Sem Cache

• Abaixo segue o exemplo de uma requisição sem nenhuma configuração de cache.

• Notem que na próxima requisição para o mesmo recurso, ele será baixado novamente:

Page 22: DevXperience WPO com .NET CORE

GET Condicional ( * )

• Headers Last-Modified e Etag podem se utilizados pelo servidor

• Na próxima requisição, esses headers são retornados para o servidor, que analisa e responde se houve alguma mudança

Page 23: DevXperience WPO com .NET CORE

GET Cache Configurado

• Cache-control, com o valor do max-age

• Com o Cache-control configurado, dentro do período, o navegador não executará a requisição.

Page 24: DevXperience WPO com .NET CORE

Com IIS

Page 25: DevXperience WPO com .NET CORE
Page 26: DevXperience WPO com .NET CORE
Page 27: DevXperience WPO com .NET CORE

Com Kestrel

Page 28: DevXperience WPO com .NET CORE
Page 29: DevXperience WPO com .NET CORE
Page 30: DevXperience WPO com .NET CORE

GZIP

Page 31: DevXperience WPO com .NET CORE

Com IIS

Page 32: DevXperience WPO com .NET CORE
Page 33: DevXperience WPO com .NET CORE
Page 34: DevXperience WPO com .NET CORE

Com Kestrel

Page 35: DevXperience WPO com .NET CORE
Page 36: DevXperience WPO com .NET CORE
Page 37: DevXperience WPO com .NET CORE

Sem GZIP

Page 38: DevXperience WPO com .NET CORE

Com GZIP

Page 39: DevXperience WPO com .NET CORE

Bundle &Minification

Page 40: DevXperience WPO com .NET CORE
Page 41: DevXperience WPO com .NET CORE
Page 42: DevXperience WPO com .NET CORE
Page 43: DevXperience WPO com .NET CORE
Page 44: DevXperience WPO com .NET CORE
Page 45: DevXperience WPO com .NET CORE
Page 46: DevXperience WPO com .NET CORE
Page 47: DevXperience WPO com .NET CORE
Page 48: DevXperience WPO com .NET CORE
Page 49: DevXperience WPO com .NET CORE

Flush HTML

Page 50: DevXperience WPO com .NET CORE

Ferramentas

FiddlerChrome CanaryWeb Page TestPageSpeed Insights

Page 51: DevXperience WPO com .NET CORE

[email protected]@rodolfofadino

Page 53: DevXperience WPO com .NET CORE

Rodolfo Fadino [email protected]