Top Banner
Server Side Rendering Single Page App with Node and React for Better UX Daiwei Lu @daiweilu
25

Server rendering-talk

Apr 13, 2017

Download

Technology

Daiwei Lu
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: Server rendering-talk

Server Side Rendering Single Page App with Node and React

for Better UX

Daiwei Lu @daiweilu

Page 2: Server rendering-talk

@daiweilu

Agenda• The UX challenges of building a single page web app

• The impact of server-side rendering on UX

• The code required to leverage React.js on the server

• The drawback of this approach: routing, data model, performance, complexity

• Useful resources to explore this topic further

Page 3: Server rendering-talk

@daiweilu

Single Page App (SPA)

• Webpages that can interact with server without refreshing

• Often load data using AJAX and simulate URL changes using browser history API, a.k.a. pushState()

Page 4: Server rendering-talk

@daiweilu

Single Page App (SPA)

Page 5: Server rendering-talk

@daiweilu

Initial Content Delivery Problem

Page 6: Server rendering-talk

@daiweilu

Render HTML in the Browser<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Title</title> <link rel="stylesheet" href="/app.css"> </head> <body> <div id="app"> <!-- HTML will be generated on the client side --> </div> <script src="/app.js"></script> </body> </html>

Page 7: Server rendering-talk

@daiweilu

“What if we could render some HTML on the server…”

Page 8: Server rendering-talk

@daiweilu

Page 9: Server rendering-talk

@daiweilu

app.get('/', function (req, res) { res.send('<html>...</html>');});

Page 10: Server rendering-talk

@daiweilu

SPA templating system cannot start from existing DOM.

They must start from blank.

Page 11: Server rendering-talk

@daiweilu

Page 12: Server rendering-talk

@daiweilu

Page 13: Server rendering-talk

@daiweilu

Page 14: Server rendering-talk

@daiweilu

Page 15: Server rendering-talk

@daiweilu

Server Side Rendering (SSR)

HTML JavaScript

CSS

React sees current markup is the same,

don’t have to render at all!

Page 16: Server rendering-talk

@daiweilu

Before & After SSR

Demo Time

Page 17: Server rendering-talk

@daiweilu

Show me the code!

Page 18: Server rendering-talk

@daiweilu

The Simple Way

• require(‘react-dom/server’).renderToString(<App/>)

• Embed initial data into a script tag before loading application code

Page 19: Server rendering-talk

@daiweilu

Challenge 1: Routing

• React Router

• Match urls on the server first

Page 20: Server rendering-talk

@daiweilu

Challenge 2: State Management

• Redux

• Data prefetching

Page 21: Server rendering-talk

@daiweilu

Challenge 3: Speed Speed Speed

• Rendering React component happens purely in JavaScript

• Node.js is single thread. It’s BLOCKING

• Just render the static part of the UI

• Try out https://github.com/aickin/react-dom-stream maybe

Page 22: Server rendering-talk

@daiweilu

Challenge 4: Share Code between Client and Server

• No DOM on server

• No database on client

• Extract logic business logic out of view layer

Page 23: Server rendering-talk

@daiweilu

Why should we event care?

• 100ms latency cost Amazon 1% in sales

• Extra 0.5 second in Google search render time drops traffic by 20%

• When you are small, you can’t afford to lose users

Page 24: Server rendering-talk

@daiweilu

More to Explore• SSR is a feature of Virtual DOM, basically any Virtual DOM library should be

able to do server side rendering

• Faster template

• If your server is not in Node.js https://github.com/airbnb/hypernova

• Server rendering in other frameworks

• Vue.js http://vuejs.org/2016/04/27/announcing-2.0/#Streaming-Server-side-Rendering

• Ember Fastboot https://www.ember-fastboot.com/

Page 25: Server rendering-talk

@daiweilu

Thank You!