Modern Javascript

Apps

@channikhabra

Purpose

  • Answer questions
  • Clear some confusion
  • Raise some eyebrows
  • Have a fun afternoon

What is Javascript?

  • Dynamically typed
  • Asynchronous
  • Single Threaded
  • Have a good load of quirks
  • Very flexible

Infamous for its quirks

Why is JS so popular?

  • Truly Multi-platform
  • Shallow Learning curve
  • Only language web understands
  • Snowball effect

JS on backend

  • Run Javascprit out of browser
  • I/O with filesystem
  • Process network requests
  • General scripting and automation

NodeJS is the king

Web frameworks

  • Express
  • Meteor
  • Koa
  • Socket.io
  • Sails
  • ...many many more

Lifecycle of a backend JS app

  • Write code
  • Deploy

Writing Code

  • Module system
    • Common JS
    • ES6
  • Static analysis
    • eslint
    • jslint
    • jshint
  • Package Managers
    • npm
    • yarn
  • Language Features
    • ES5
    • ES6
    • Experimental/custom extensions
  • How to async
    • Callbacks
    • Promises
    • Observable
    • async/await
    • Generators
    • Mysterious solutions from FP world

Deploying

  • By hand
  • Framework Specific Solutions
  • Host specific solutions
  • Deployment tools
    • shipit
    • pm2

Process Management

  • pm2
  • forever
  • supervisord

JS on frontend

Choice. The problem is Choice

Lifecycle of a frontend JS app

  • Write code
  • Build
  • Deploy

Writing Code

  • Module system
    • Common JS
    • ES6
    • AMD
    • ...
  • Static analysis
    • eslint
    • jslint
    • jshint
  • Package Managers
    • npm
    • yarn
    • jspm
  • Language Features
    • ES5
    • ES6
    • Experimental/custom extensions
  • How to async
    • Callbacks
    • Promises
    • Observable
    • async/await
    • Generators
    • Mysterious solutions from FP world
  • Feature detection
  • Pollyfills

General build flow

module.js

module.js

module.js

...

Build

bundle.js

Challenges

  • Minimize data sent to client
  • Minimize time to initial paint
  • Minimize time to be interactive
  • Never block UI

Build process:

Concatenation

bundle.js

file1.js

file2.js

file-n.js

Build process:

Minification

var name = "Joe";

var greet = function(name) {
    updateHtml("Hello" + name);
}

greet(name);
var a,b;a="Joe";b=function(c){d("Hello"+a);}b(a);

Build process:

Dead Code Elimination and Tree shaking

var name = "Joe";

var greet_fr = function(name) {
    updateHtml("Bonjour " + name);
}

var greet = function(name) {
    updateHtml("Hello " + name);
}

greet(name);
var name = "Joe";

var greet = function(name) {
    updateHtml("Hello" + name);
}

greet(name);

Build process:

Compiling Templates

HTML-ish template

Javascript

Build process:

Transpilation

Future/custom Javascript

Compatible Javascript

Build process:

Code Splitting

route-1-bundle.js

file1.js

file2.js

file-n.js

route-2-bundle.js

Build process:

Compression

bundle.js

bundle.js.gz

Deployment

  • Backend app server
  • Static Server
  • CDN

Isomorphic / Universal Apps

  • Code shared b/w Client and server
  • Initial render on server and client takes over after that
  • Several different options
    • Meteor
    • react
    • next

Javascript on Mobile

  • Cordova
  • Progressive web apps
  • React native and Nativescript

Javascript on Desktop

  • Electron
  • NW

Some hot Trends

  • Underscore
  • Lodash
  • Ramda

Utility Libraries

Some hot Trends

  • Ramda
  • lodash-fp
  • Lazy.js
  • Immutable

Funtional Programming

Some hot Trends

  • Flux
  • Redux
  • Mobx

Architectures over framworks

Some hot Trends

  • Rx
  • most
  • Bacon

Reactive Programming

Some hot Trends

  • Flowtype
  • Typescript

Strongly Typed solutions

Some hot Trends

  • Typescript
  • Clojurescript
  • Purescript
  • Elm

Compile to JS Languages

Some hot Trends

  • Fetching data from server
  • Alternative to building REST APIs in some cases
  • Other contender: Falcor.js

GraphQL

Some hot Trends

GraphQL

Thank You : )

- @channikhabra