54
Client side web performance for back end developers Bart Read tp://www.slideshare.net/bartread/ddd-nights-client-side-performance-for-back-end-develope

Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Embed Size (px)

Citation preview

Page 1: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Client side web performance for back

end developersBart Read

http://www.slideshare.net/bartread/ddd-nights-client-side-performance-for-back-end-developers

Page 2: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Who am I?• Bart Read, Web, Database, and Mobile Performance Consultant• Previously worked for Red Gate• Contacts• E: [email protected]• W:

• www.bartread.com• https://arcade.ly (site on which this talk is based)

• B: www.bartread.com/blog• T: @bart_read• GH: https://github.com/bartread

Page 5: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Partial Browser Page Lifecycle

Page 6: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016
Page 7: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Modern web apps are becoming more and more

like fat client desktop apps that run in a browser

Page 8: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Stuff that’s out of scope• The back-end• Front end/SPA frameworks• WebGL• The latest and greatest JavaScript libraries, build tools, blah…zzzzz• ECMAScript 6 (or 7!), TypeScript, etc.

Page 9: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

HTTP/2If you take nothing else away from this talk, take this

Page 10: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

HTTP/2• Multiplexing• Server push• Stream priority• Header compression• (De facto mandatory encryption)

Page 11: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016
Page 12: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Express.js app with HTTPS support

Page 13: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016
Page 14: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Express.js app with HTTP/2 and SPDY support

https://github.com/indutny/node-spdy

Page 15: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016
Page 16: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016
Page 17: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016
Page 18: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

HTTP/2 Platform Support• IIS on Windows 10 and Windows Server 2016• .NET 4.6.0 or later

• Tutorial: http://www.c-sharpcorner.com/UploadFile/efa3cf/creating-http2-supported-website-with-Asp-Net-core-hostin/

• Node/express – spdy module• https://www.npmjs.com/package/spdy• Tutorial: https://webapplog.com/http2-node/

• Java• Go – http2 package

• https://godoc.org/golang.org/x/net/http2• Demo: https://http2.golang.org/

• Ruby• Python• PHP

Full list at https://github.com/http2/http2-spec/wiki/Implementations

Page 19: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Memory usage and GC

Page 20: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Chrome Dev Tools Timeline

Page 21: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

JavaScript heap usage over time

Page 22: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Chrome Dev Tools profiling options

Page 23: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016
Page 24: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Particle Creation in Star Citadel

Page 25: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Strategies for reducing JS memory usage• Object pooling rather than creating new objects• Use of prototypes• Reducing closure usage

Page 26: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Simple Object Pool

Page 27: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Create object from prototype with pooling

Page 28: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Long Running JavaScript• Intersperse delays• setTimeout(function() { /* Do your stuff */ });• allow content to render

• Web Workers

Page 29: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Canvas

http://www.kevs3d.co.uk/dev/canvasmark/

Page 30: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

CSS Effects• First run of CSS animations is often ropey• Transform/scale/skew• Forcing hardware acceleration• https://www.smashingmagazine.com/2012/06/play-with-hardware-accelerat

ed-css/• transform: translate3d(0,0,0);• (still necessary in 2016?)

Page 31: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

ToolsHow to find out how your page’s are performing from a client’s perspective

Page 32: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Tools• Chrome Dev Tools (obviously)• Speed testers• https://developers.google.com/speed/pagespeed/insights/• https://www.webpagetest.org/• https://tools.pingdom.com/#!/

Page 33: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

HousekeepingAll the small things true care, truth brings…

Page 34: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Avoid Redirects (especially landing page)

Page 35: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Other legitimate redirects

Page 36: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Content Compression

Apache: mod_deflate

Nginx: ngx_http_gzip_module

Page 38: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Inline enough CSS to load above the fold content (part 2)

https://github.com/VFK/gulp-html-replace

Page 39: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Inline enough CSS to load above the fold content (part 3)

Page 40: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Asynchronously load other CSS

https://github.com/filamentgroup/loadCSS

Before:

After:

Page 41: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Load scripts last

Page 42: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016
Page 43: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016
Page 44: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016
Page 45: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Google Adsense scripts (applies to third party scripts in general)

<- Leave this inline

And load the Adsense script at the bottom of the page,\/\/\/ after your own scripts

Page 46: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Inline small scripts

Page 47: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

DNS Prefetch

Before

After

Page 48: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Don’t get too carried away in <HEAD>!

https://developers.google.com/speed/docs/insights/PrioritizeVisibleContent

https://en.wikipedia.org/wiki/TCP_congestion_control

Page 49: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

PayloadDon’t join thecargo cult

Page 50: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Do you really need that library or framework?

https://developer.mozilla.org/en-US/docs/Web/Reference/API

Page 51: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Many libraries are componentized

Include only what you need

Page 52: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

It’s the latency, stupid!

• http://www.stuartcheshire.org/rants/latency.html

• Minimise requests and roudtrips

• Sprite or concatenate

Page 53: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

CDNs

Page 54: Client Side Performance for Back End Developers - Camb Expert Talks, Nov 2016

Questions?