Slide 1

Slide 1 text

Classic Rails performance optimisation tips Alessandro Lepore

Slide 2

Slide 2 text

“Please make the site faster” - Any client

Slide 3

Slide 3 text

“Ruby is slow” - Anyone

Slide 4

Slide 4 text

“This is actually fun!” - Alessandro

Slide 5

Slide 5 text

Backend

Slide 6

Slide 6 text

Measure!

Slide 7

Slide 7 text

Measure!

Slide 8

Slide 8 text

DB is fast, Ruby is slow ● SQL is awesome ● SQL is complex ● pluck instead of map ● order instead of sort_by ● any? instead of present? ● size instead of count or length ● find_each instead of all ● select to limit fields ● Avoid collection.to_a ● N+1 queries are not always bad

Slide 9

Slide 9 text

N+1 queries are not always bad

Slide 10

Slide 10 text

Useless data is always bad

Slide 11

Slide 11 text

Tips ● Measure ● Avoid mistakes ● Cache all the things! ● Use recent Ruby versions ● Try optimised gems (fast_blank, fast_jsonapi, concurrent-ruby-ext etc.) ● Know your language (GC, Heap, Constant cache etc.) ● Concurrency / background jobs ● Ruby fine tuning (ENV vars tweaking, alternative malloc) ● Also DevOp

Slide 12

Slide 12 text

Frontend

Slide 13

Slide 13 text

Measure! ● PageSpeed ● YSlow ● Speedcurve ● Chrome DevTools ● Lots of other tools

Slide 14

Slide 14 text

Tips ● Limit response size, optimise images ● Defer Javascripts ● All those things that Rails is already doing ○ Single file, minify, compress, hash etc. ● HTTP headers ● Limit connections ● Split critical CSS ● Limit or async web fonts ● Use a CDN ● Try new technologies: HTTP/2, WebP...

Slide 15

Slide 15 text

No content