spa, isomorphic and back to the server: our journey with javascript @ jsday 2017 in verona (italy)
TRANSCRIPT
![Page 1: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/1.jpg)
Alex Nadalin - CTO @ namshi.comJsDay 2017 (Verona - Italy)
![Page 2: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/2.jpg)
WARNING
Controversyahead
![Page 3: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/3.jpg)
Take #1
![Page 4: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/4.jpg)
Started with a SPA
![Page 5: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/5.jpg)
...which pissed bots off
![Page 6: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/6.jpg)
...which pissed clients off
![Page 7: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/7.jpg)
...which pissed clients off
![Page 8: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/8.jpg)
...which pissed clients off
![Page 9: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/9.jpg)
Take #2
![Page 10: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/10.jpg)
Isomorphic js
![Page 11: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/11.jpg)
Both on the client & the server
![Page 12: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/12.jpg)
universal js
![Page 13: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/13.jpg)
Works only in movies
![Page 14: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/14.jpg)
https://2015.jsday.it/talk/back-to-the-future-isomorphic-javascript-applications/
![Page 15: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/15.jpg)
Clients are still angry
![Page 16: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/16.jpg)
Sneak peak of a custom-madeuniversal js framework
![Page 17: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/17.jpg)
Sneak peak of a custom-madeuniversal js framework
![Page 18: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/18.jpg)
Sneak peak of a custom-madeuniversal js framework
![Page 19: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/19.jpg)
Fonzie does not approve.
![Page 20: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/20.jpg)
The do-over
![Page 21: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/21.jpg)
Simplify our codebase
![Page 22: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/22.jpg)
Better client-side performance
![Page 23: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/23.jpg)
roi
![Page 24: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/24.jpg)
Appealing looks
![Page 25: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/25.jpg)
Best website?
![Page 26: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/26.jpg)
It’s an app.
![Page 27: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/27.jpg)
It’s an app.
Smooth transitions
![Page 28: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/28.jpg)
It’s an app.
Smooth transitions
Great (perceived) performance
![Page 29: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/29.jpg)
Can a websiteMatch that?
![Page 30: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/30.jpg)
Spa closely bridges the gap
![Page 31: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/31.jpg)
Spa closely bridges the gap
Additional layer of complexity
![Page 32: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/32.jpg)
Generally no.
Spa closely bridges the gap
Additional layer of complexity
![Page 33: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/33.jpg)
Do we need it?
![Page 34: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/34.jpg)
![Page 35: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/35.jpg)
![Page 36: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/36.jpg)
![Page 37: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/37.jpg)
service is king
![Page 38: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/38.jpg)
The b* stack
![Page 39: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/39.jpg)
The b* stack
![Page 40: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/40.jpg)
The b* stack
![Page 41: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/41.jpg)
The b* stack
![Page 42: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/42.jpg)
The b* stack
![Page 43: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/43.jpg)
server
![Page 44: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/44.jpg)
![Page 45: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/45.jpg)
client
![Page 46: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/46.jpg)
Webpack 2
![Page 47: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/47.jpg)
Webpack 2
Tree-shaking saved us15/20% of the gzipped
bundle size
![Page 48: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/48.jpg)
Say “no” to jquery(as much as possible)
![Page 49: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/49.jpg)
![Page 50: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/50.jpg)
Abstraction === cost
![Page 51: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/51.jpg)
Abstraction === cost let obj = { name: 'alex', age: 28, hair: 'enough', status: 'married', job: 'who really knows', }
_.pick(obj, ['name', 'age'])
{ name: obj.name, age: obj.age,}
![Page 52: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/52.jpg)
Abstraction === cost let obj = { name: 'alex', age: 28, hair: 'enough', status: 'married', job: 'who really knows', }
_.pick(obj, ['name', 'age'])
{ name: obj.name, age: obj.age,}
![Page 53: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/53.jpg)
Abstraction === cost let obj = { name: 'alex', age: 28, hair: 'enough', status: 'married', job: 'who really knows', }
_.pick(obj, ['name', 'age'])
{ name: obj.name, age: obj.age,}
![Page 54: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/54.jpg)
Abstraction === cost let obj = { name: 'alex', age: 28, hair: 'enough', status: 'married', job: 'who really knows', }
_.pick(obj, ['name', 'age'])
{ name: obj.name, age: obj.age,}700k ops/s 75m ops/s
![Page 55: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/55.jpg)
Abstraction === cost let obj = { name: 'alex', work: { name: 'Namshi' } }
_.get(obj, 'work.name', null)
![Page 56: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/56.jpg)
Abstraction === cost let obj = { name: 'alex', work: { name: 'Namshi' } }
_.get(obj, 'work.name', null)
1.3m ops/s
![Page 57: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/57.jpg)
Abstraction === cost let obj = { name: 'alex', work: { name: 'Namshi' } }
let work = null;
if (obj && obj.work && obj.work.name) { work = obj.work.name }
![Page 58: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/58.jpg)
Abstraction === cost let obj = { name: 'alex', work: { name: 'Namshi' } }
let work = null;
if (obj && obj.work && obj.work.name) { work = obj.work.name }
70m ops/s
![Page 59: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/59.jpg)
!Results may vary
![Page 60: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/60.jpg)
let attributes = [‘price’,‘name’,‘description’,‘url’
]
………
function sanitize(products) {return products.map(p => {
return _.pick(p, attributes) })}
![Page 61: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/61.jpg)
let attributes = [‘price’,‘name’,‘description’,‘url’
]
………
function sanitize(products) {return products.map(p => {
return _.pick(p, attributes) })}
![Page 62: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/62.jpg)
let attributes = [‘price’,‘name’,‘description’,‘url’
]
………
function sanitize(products) {return products.map(p => {
return _.pick(p, attributes) })}
![Page 63: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/63.jpg)
let attributes = [‘price’,‘name’,‘description’,‘url’
]
………
function sanitize(products) {return products.map(p => {
return _.pick(p, attributes) })} 5ms / req
![Page 64: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/64.jpg)
let attributes = [‘price’,‘name’,‘description’,‘url’
]
………
function sanitize(products) {return products.map(p => {
return _.pick(p, attributes) })} 10% / req
![Page 65: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/65.jpg)
![Page 66: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/66.jpg)
const _ = require(‘lodash’)
![Page 67: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/67.jpg)
const _ = require(‘lodash’)
const pick = require(‘lodash/pick’)
![Page 68: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/68.jpg)
articles.filter(a => a.active).map(a => {a.title = titleCase(a.title)
return a})
![Page 69: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/69.jpg)
articles.filter(a => a.active).map(a => {a.title = titleCase(a.title)
return a})
![Page 70: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/70.jpg)
articles.filter(a => a.active).map(a => {a.title = titleCase(a.title)
return a})
![Page 71: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/71.jpg)
articles.filter(a => a.active).map(a => {a.title = titleCase(a.title)
return a})
![Page 72: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/72.jpg)
articles.filter(a => a.active).map(a => {a.title = titleCase(a.title)
return a})
700k ops/s
![Page 73: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/73.jpg)
articles.reduce((acc, a) => {if (a.active) {a.title = titlecase(a.title)acc.push(a)
}
return acc})
![Page 74: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/74.jpg)
articles.reduce((acc, a) => {if (a.active) {a.title = titlecase(a.title)acc.push(a)
}
return acc}) 4M ops/s
![Page 75: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/75.jpg)
sprites?
![Page 76: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/76.jpg)
No thanks,I do http/2
![Page 77: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/77.jpg)
300kb 500kb 200kb
![Page 78: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/78.jpg)
The old www
![Page 79: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/79.jpg)
The old www
![Page 80: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/80.jpg)
300kb 500kb
The old www
![Page 81: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/81.jpg)
300kb 500kb 800kb / tot2 conns
The old www
![Page 82: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/82.jpg)
sprites
![Page 83: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/83.jpg)
sprites
![Page 84: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/84.jpg)
1mb / tot1 conn
sprites
![Page 85: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/85.jpg)
http/2
![Page 86: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/86.jpg)
http/2
![Page 87: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/87.jpg)
800kb / tot1 conn
http/2
![Page 88: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/88.jpg)
react?
![Page 89: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/89.jpg)
“No sauce please”
![Page 90: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/90.jpg)
“No sauce please”
react-lite 25kb
preact 3kb
![Page 91: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/91.jpg)
css animations
![Page 92: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/92.jpg)
css animations
![Page 94: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/94.jpg)
preconnect
<html class="en"><head>
<link preconnect="https://a.namshicdn.com" crossorigin />
![Page 95: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/95.jpg)
preconnect
<html class="en"><head>
<link preconnect="https://a.namshicdn.com" crossorigin />
![Page 96: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/96.jpg)
preconnect
<html class="en"><head>
<link preconnect="https://a.namshicdn.com" crossorigin />Initiate
connections
ASAP
![Page 97: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/97.jpg)
preload<link
rel="preload" href="https://mycdn.com/fonts.css" as="style" onload="
this.rel='stylesheet';this.className='font-loaded'
"/>
![Page 98: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/98.jpg)
preload<link
rel="preload" href="https://mycdn.com/fonts.css" as="style" onload="
this.rel='stylesheet';this.className='font-loaded'
"/>
![Page 99: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/99.jpg)
preload<link
rel="preload" href="https://mycdn.com/fonts.css" as="style" onload="
this.rel='stylesheet';this.className='font-loaded'
"/>
![Page 100: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/100.jpg)
preload<link
rel="preload" href="https://mycdn.com/fonts.css" as="style" onload="
this.rel='stylesheet';this.className='font-loaded'
"/>
![Page 101: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/101.jpg)
preload<link
rel="preload" href="https://mycdn.com/fonts.css" as="style" onload="
this.rel='stylesheet';this.className='font-loaded'
"/>
![Page 102: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/102.jpg)
preload<link
rel="preload" href="https://mycdn.com/fonts.css" as="style" onload="
this.rel='stylesheet';this.className='font-loaded'
"/>
Async
Non-blocking
CSS
![Page 103: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/103.jpg)
preload
![Page 104: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/104.jpg)
prerender window.addEventListener('load', function(){ var preRenderLink = doc.createElement('link'); preRenderLink.rel='prerender'; preRenderLink.href= '{{ nextPage }}'; document.head.appendChild(preRenderLink); });
![Page 105: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/105.jpg)
prerender window.addEventListener('load', function(){ var preRenderLink = doc.createElement('link'); preRenderLink.rel='prerender'; preRenderLink.href= '{{ nextPage }}'; document.head.appendChild(preRenderLink); });
![Page 106: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/106.jpg)
prerender window.addEventListener('load', function(){ var preRenderLink = doc.createElement('link'); preRenderLink.rel='prerender'; preRenderLink.href= '{{ nextPage }}'; document.head.appendChild(preRenderLink); });
![Page 107: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/107.jpg)
prerender window.addEventListener('load', function(){ var preRenderLink = doc.createElement('link'); preRenderLink.rel='prerender'; preRenderLink.href= '{{ nextPage }}'; document.head.appendChild(preRenderLink); });
![Page 108: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/108.jpg)
prerender window.addEventListener('load', function(){ var preRenderLink = doc.createElement('link'); preRenderLink.rel='prerender'; preRenderLink.href= '{{ nextPage }}'; document.head.appendChild(preRenderLink); });
![Page 109: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/109.jpg)
prerender
![Page 110: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/110.jpg)
SPLIT ASSETS
![Page 111: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/111.jpg)
SPLIT ASSETS
![Page 112: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/112.jpg)
SPLIT ASSETS
![Page 113: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/113.jpg)
index.html
![Page 114: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/114.jpg)
detail.html
![Page 115: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/115.jpg)
Less bandwidth, good cache rate
![Page 116: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/116.jpg)
Less bandwidth, good cache rate
7 req~100kb
![Page 117: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/117.jpg)
Less bandwidth, good cache rate
9 req~150kb
![Page 118: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/118.jpg)
Less bandwidth, good cache rate
13 req~380kb
![Page 119: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/119.jpg)
RESULTS ?
![Page 120: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/120.jpg)
-60%AVG document content loaded time
1.93 vs 4.84
![Page 121: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/121.jpg)
-14%Bounce rate
![Page 122: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/122.jpg)
+40%AVG session duration
![Page 123: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/123.jpg)
+30%Conversion rate
![Page 124: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/124.jpg)
LookingForward
to...
![Page 125: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/125.jpg)
![Page 126: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/126.jpg)
Not available in the browserhttps://github.com/grpc/grpc/issues/8682
![Page 127: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/127.jpg)
![Page 128: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/128.jpg)
Under developmenthttps://firebase.google.com/docs/cloud-messaging/
![Page 129: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/129.jpg)
![Page 130: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/130.jpg)
Under developmenthttps://githubengineering.com/githubs-post-csp-journey/
![Page 132: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/132.jpg)
Old, abandoned ideahttps://youtu.be/v0xRTEf-ytE?t=16m25s
![Page 133: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/133.jpg)
Still far, far awayhttps://github.com/jakearchibald/navigation-transitions
![Page 134: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/134.jpg)
“Hot” is overrated
NERD ADVICE
![Page 135: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/135.jpg)
“Hot” is overratedhttps://jakearchibald.com/2016/caching-best-practices/
“As you can see, you can hack around poor caching in your service worker, but you're way better off fixing the root of the problem. Getting your caching right makes things easier in service worker land, but also benefits browsers that don't support service worker (Safari, IE/Edge), and lets you get the most out of your CDN.”
https://jakearchibald.com/2016/caching-best-practices/
NERD ADVICE
![Page 136: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/136.jpg)
“Solve problems on the right layer”https://www.ampproject.org/learn/amp-design-principles/
NERD ADVICE
![Page 137: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/137.jpg)
“Solve problems on the right layer”https://www.ampproject.org/learn/amp-design-principles/
NERD ADVICE
![Page 138: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/138.jpg)
Servers can still be pretty darn fast.
NERD ADVICE
![Page 139: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/139.jpg)
NERD ADVICE
![Page 140: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/140.jpg)
Servers can still be pretty fast
NERD ADVICE
![Page 141: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/141.jpg)
Servers can still be pretty fast
NERD ADVICE
![Page 142: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/142.jpg)
Servers can still be pretty fast
NERD ADVICE
![Page 143: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/143.jpg)
50% within <30ms
![Page 144: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/144.jpg)
95% within <120ms
![Page 145: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/145.jpg)
Take this any day
![Page 146: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/146.jpg)
Measure $ wiselyhttp://250bpm.com/blog:86
NERD ADVICE
![Page 147: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/147.jpg)
NERD ADVICEAct upon what moves the needlehttps://en.wikipedia.org/wiki/Pareto_principle
![Page 148: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/148.jpg)
Alessandro Nadalin
![Page 149: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/149.jpg)
Alessandro Nadalin
@_odino_
![Page 150: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/150.jpg)
Alessandro Nadalin
@_odino_
Namshi
![Page 151: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/151.jpg)
Alessandro Nadalin
@_odino_
Namshi
CTO
![Page 152: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/152.jpg)
Alessandro Nadalin
@_odino_
Namshi
CTO
odino.org
![Page 153: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/153.jpg)
Thanks!Alessandro Nadalin
@_odino_
Namshi
CTO
odino.org
![Page 154: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/154.jpg)
joind.in/talk/9e16d
Alessandro Nadalin
@_odino_
Namshi
CTO
odino.org
![Page 155: SPA, isomorphic and back to the server: our journey with JavaScript @ JsDay 2017 in Verona (Italy)](https://reader031.vdocuments.net/reader031/viewer/2022030317/5a66ee887f8b9a91298b4bc3/html5/thumbnails/155.jpg)
we are hiring!tech.namshi.com/join-us
github.com/namshi
twitter.com/TechNamshi
tech.namshi.com