Top Banner
WPO Web Performance Optimization com .NET Core Rodolfo Fadino
53

DevXperience WPO com .NET CORE

Jan 23, 2018

Download

Internet

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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]