Top Banner
Building Reactive, Realtime Apps Without Writing JavaScript Bryan Powell @bryanp All Things Open 2015
46

Building Reactive, Realtime Apps Without Writing Javascript

Jan 23, 2018

Download

Technology

All Things Open
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: Building Reactive, Realtime Apps Without Writing Javascript

Building Reactive, Realtime AppsWithout Writing JavaScript

Bryan Powell @bryanp

All Things Open 2015

Page 2: Building Reactive, Realtime Apps Without Writing Javascript

The web should not be single-page.

We need a better way to build the web.

Page 3: Building Reactive, Realtime Apps Without Writing Javascript
Page 4: Building Reactive, Realtime Apps Without Writing Javascript
Page 5: Building Reactive, Realtime Apps Without Writing Javascript
Page 6: Building Reactive, Realtime Apps Without Writing Javascript

Collaboration

Content

Page 7: Building Reactive, Realtime Apps Without Writing Javascript
Page 8: Building Reactive, Realtime Apps Without Writing Javascript
Page 9: Building Reactive, Realtime Apps Without Writing Javascript
Page 10: Building Reactive, Realtime Apps Without Writing Javascript
Page 11: Building Reactive, Realtime Apps Without Writing Javascript

Progressive enhancement is necessary when content has priority.

Page 12: Building Reactive, Realtime Apps Without Writing Javascript

Sorry, web standards will win.

Page 13: Building Reactive, Realtime Apps Without Writing Javascript

But isomorphic JavaScript!

Page 14: Building Reactive, Realtime Apps Without Writing Javascript
Page 15: Building Reactive, Realtime Apps Without Writing Javascript

Server Rendered w/ Real-Time Layer

Keep Business Logic on Server

(real-time as progressive enhancement)

(write no JavaScript)

WAT.

Page 16: Building Reactive, Realtime Apps Without Writing Javascript

Example Time!!!Disclaimer: everything you’re about to see

works and is available now on GitHub.

Page 17: Building Reactive, Realtime Apps Without Writing Javascript

<div data-scope="stats"> <span data-prop="active"> 1 </span>

<span data-prop="total"> 2 </span> </div>

Page 18: Building Reactive, Realtime Apps Without Writing Javascript

<div data-scope="stats"> <span data-prop="active"> 1 </span>

<span data-prop="total"> 2 </span> </div>

Page 19: Building Reactive, Realtime Apps Without Writing Javascript

<div data-scope="stats"> <span data-prop="active"> 1 </span>

<span data-prop="total"> 2 </span> </div>

Page 20: Building Reactive, Realtime Apps Without Writing Javascript

<div data-scope="stats"> <span data-prop="active"> 1 </span>

<span data-prop="total"> 2 </span> </div>

Page 21: Building Reactive, Realtime Apps Without Writing Javascript

<div data-scope="stats"> <span data-prop="active"> 1 </span>

<span data-prop="total"> 2 </span> </div>

Page 22: Building Reactive, Realtime Apps Without Writing Javascript

<div data-scope="stats"> <span data-prop="active"> 1 </span>

<span data-prop="total"> 2 </span> </div>

{ active: 3,

total: 42

}

<

Page 23: Building Reactive, Realtime Apps Without Writing Javascript

<div data-scope="stats"> <span data-prop="active"> 1 </span>

<span data-prop="total"> 2 </span> </div>

{ active: 3,

total: 42

}

view.scope(:stats).apply(data)

<

Page 24: Building Reactive, Realtime Apps Without Writing Javascript

<div data-scope="stats"> <span data-prop="active"> 1 </span>

<span data-prop="total"> 2 </span> </div>

{ active: 3,

total: 42

}

view.scope(:stats).apply(data)

<

Page 25: Building Reactive, Realtime Apps Without Writing Javascript

<div data-scope="stats"> <span data-prop="active"> 1 </span>

<span data-prop="total"> 2 </span> </div>

{ active: 3,

total: 42

}

view.scope(:stats).apply(data)

<

Page 26: Building Reactive, Realtime Apps Without Writing Javascript

<div data-scope="stats"> <span data-prop="active"> 3 </span>

<span data-prop="total"> 42 </span> </div>

{ active: 3,

total: 42

}

view.scope(:stats).apply(data)

<

Page 27: Building Reactive, Realtime Apps Without Writing Javascript

<div data-scope="stats"> <span data-prop="active"> 3 </span>

<span data-prop="total"> 42 </span> </div>

{ active: 3,

total: 42

}

view.scope(:stats).apply(data)

<

Non-Destructive Rendering

Page 28: Building Reactive, Realtime Apps Without Writing Javascript

get '/' do view.scope(:stats).render(:display, with: data(:stats).all ).subscribe end

Page 29: Building Reactive, Realtime Apps Without Writing Javascript

get '/' do view.scope(:stats).render(:display, with: data(:stats).all ).subscribe end

Page 30: Building Reactive, Realtime Apps Without Writing Javascript

get '/' do view.scope(:stats).render(:display, with: data(:stats).all ).subscribe end

Page 31: Building Reactive, Realtime Apps Without Writing Javascript

get '/' do view.scope(:stats).render(:display, with: data(:stats).all ).subscribe end

Page 32: Building Reactive, Realtime Apps Without Writing Javascript

get '/' do view.scope(:stats).render(:display, with: data(:stats).all ).subscribe end

Page 33: Building Reactive, Realtime Apps Without Writing Javascript

get '/' do view.scope(:stats).render(:display, with: data(:stats).all ).subscribe end

Page 34: Building Reactive, Realtime Apps Without Writing Javascript

server

>

<

websocket

JavaScript Library

Page 35: Building Reactive, Realtime Apps Without Writing Javascript

state change server> transformations>

JavaScript Library

>

<<

[ "apply", [ { "total": "4", "active": "2" } ] ] websocket

Page 36: Building Reactive, Realtime Apps Without Writing Javascript

View Transformation Protocol

Page 37: Building Reactive, Realtime Apps Without Writing Javascript

View Transformation ProtocolBusiness logic is written once, stays on the server.

Page 38: Building Reactive, Realtime Apps Without Writing Javascript

View Transformation ProtocolFaster since we render only the changes.

Page 39: Building Reactive, Realtime Apps Without Writing Javascript

View Transformation ProtocolThe real-time web as progressive enhancement.

Page 40: Building Reactive, Realtime Apps Without Writing Javascript

mutable

server> transformations> >

<<

state change

websocket

Page 41: Building Reactive, Realtime Apps Without Writing Javascript

Simple State Propagation

Page 42: Building Reactive, Realtime Apps Without Writing Javascript

Simple State PropagationAll changes in view state come from the server.

Page 43: Building Reactive, Realtime Apps Without Writing Javascript

Simple State PropagationServer contains the ultimate truth, client follows.

Page 44: Building Reactive, Realtime Apps Without Writing Javascript

Simple State PropagationPrioritizes user trust over performance.

Page 45: Building Reactive, Realtime Apps Without Writing Javascript

pakyow.org

Page 46: Building Reactive, Realtime Apps Without Writing Javascript

pakyow.org

metabahn.com

@bryanp

bryanp/realtime-talk