JS developer 

Cutting edge

Toolset

  • often used as dev environment,
  • based on V8 - google chrome JS engine,
  • add APIs that are locked in browser - IO/tty/...
  • event based, non blocking, 
  • single loop, async processing
  • deals with module loading,
  • versions,
  • dependencies,
  • updates

Grunt

  • plugin rich, 
  • simple config, 
  • currently problems with maintainers,

Gulp

  • stream based,
  • code over configuration, 
  • simple API

Task runner

Tests

  • frameworks
    • BDD/TDD
      • Jasmine, Mocha, Chai, ...
  • runners
    • karma
  • e2e
    • protractor, nightwatchjs

Scaffolding

  • yeomain,
  • slush

Stack

Servers

  • express - fast, simple,
  • hapi - HA, middleware,
  • koa - alternative

Storage

  • MongoDB,
  • CouchDB, 
  • PouchDB, 
  • Redis

Frameworks

It seems to be ...

version 1.x

  • easy to begin,
  • a lot of online resources,
  • based on complex concept,
  • has performance limitations,

 

version 2.x

  • bad press, 
  • large scope of changes,
  • high performance gain,
  • a lot of new features
  • Google support,
  • commonly recognized,
  • small and simple
  • focus on Model
  • plain JavaScript
  • good in conventions over configuration,
  • well documented,
  • early adopter,
  • great for Rails, Diango devs
  • focuses on View rendering,
  • declarative templates - JSX,
  • not MV* based
  • not a framework - it's just lib,
  • often used as a part of solution
  • cutting egde,
  • does not have Angular program limitations,
  • not known commonly,
  • recently in beta

ES 2015

Declarations

  • block scope - let,
  • real constants support - const

Functions

  • default values,
  • named and rest parameters, 
  • arrow function

Objects and Classes

  • inheritance and syntax sugar,
  • Object.assign

Data structs

  • Array,
  • Map,
  • Set

Others

  • modules,
  • spread, 
  • tail-call optimizations,
  • iterators,
  • promises,
  • generators.

Modularization

Immediately-invoked function expression(IIFE)

  • simple solution, 
  • does not depend on external loader,
  • but not real module system 

CommonJS

  • compact syntax,
  • sync loading - not suitable for webapp,
  • used in node.js loader

Asynchronous Module Definition (AMD)

  • different syntax,
  • based on function wrapping, 
  • better suited to the dynamic webapps

ES 2015 modules

  • more compact than CommonJS,
  • static checks on structure, 
  • cycle dependencies support,
  • declarative syntax, 
  • API for loader

FIN

Q&A

js-cutting-edge

By Rafał Warzycha

js-cutting-edge

  • 583