10. TTI: Time To Interact
The perceptual speed for user to be able to start interacting
11. Time To Interact
<100ms: damn this app is fast, dude!
100ms - 300ms: this app is responding to my input
300ms - 500ms: mmmm, my brother is downloading
some torrents again, the internet is slow
>500ms: Hey brother! Stop streaming those torrents,
i’m trying to use the internet here.
12. Impossible to avoid the latencies
we live in the intergalactic cloud, right?
13. Don’t let the dark side betray you
They will say: “our servers are at full speed, they can’t be faster.”
…though it does not feel fast to your users
14. Why is your ajax call soooo slow?
http request handshaking
server-side script running on shared resources
network latency to database
database query
http request: data transfer
20. Store data client-side
Persist data server-side
query the database once when app starts
download all user-specific data needed
all users get same static content: 100% cache hit, so
make sure you’re database caching is on!
this might take a few seconds the first time,.. show
some static stuff to user first
25. example: auto-complete
On startup: download all users from database (id,
name, phone number)
Same query for every one: served directly from
database cache!
Not that fast: takes 2 seconds! ouch
26. What, 2 seconds?!?!
It doesn’t change your Time To Interact…
Static content is served from cache and rendered
immediately (100ms)
Your user has to move to the search box (1.5s)
Your user must start typing (300ms)
And type up to 3 letters (300ms) before we start querying
27. Query on client-side
Searching in 180.000 user takes up 500 ms with a
classic AJAX request to database
Search on client-side (<50ms) = instant!
10x faster —> User experience 1000x better!
28. Where to store client-side?
MVC framework: Backbone, Angular, Ember, …
Store in models
Persist in LocalStorage to reduce startup time and
across pages
30. Data changes in realtime
Don’t kill your server polling for data
Use websockets or long-polling
Use a fast database with pubsub: redis, mongodb, …
Clients subscribe for updates
31. fast database + smart database
Use 2 databases
Fast database: redis.io, mongodb, … store things you
stream to client
Smart database: mysql, postgresql, … store
everything (also in realtime database)
Write to both database
Read from fast database = cache for slow database
33. node.js + socket.io + redis.io
Super easy to setup!
You don’t need to be a back-end engineer, it’s just
javascript that you need to copy-paste
Front-end developers can deliver a fast front-end if they
master this part of the app
All the cross-browser shit is already solved
36. Conclusion
Not the websockets make your app fast
Avoiding AJAX calls to a slow database do!
Store all data client-side, do your queries client-side