The Front-end Landscape

Angular

React

Redux

Polymer

Vue

Firebase

jQuery

ES6

Babel

Browserify

Webpack

Gulp

Grunt

CSS Modules

Web Components

REST

Services

Interfaces

Events

Async

Promises

FRP

Pure Functions

Reducers

Functors

Monads

Classes

Inheritance

Lodash

Ramda

Underscore

Ember

Flux

Riot

Transpiling

Bootstrap

RxJs

Broccoli

Handlebars

HTMLBars

UMD

AMD

CommonJS

Requirejs

Fetch

So Many Frameworks

  • 21 different javascript frameworks featured.
  • 14 different compile-to-js frameworks.
  • 36 different js frameworks in labs section

 

TodoMVC

A place for comparisons of frameworks against a common application

Why so many?

JavaScript community hasn't matured like other "real" language communites?

The web platform sucks so bad we are desperate for some abstraction?

JavaScript developers suffer from "not created here" syndrome?

The web platform is in a season of rapid advancement.

Rate of Change

The web platform is advancing at an unprecedented rate.

The pace of change does not appear to be slowing down anytime soon.

Rate of Change

This acceleration of change has spawned a balancing desire to simplify and reduce unnecessary complexity where possible.

This has manifested itself in the form of a preference for componintization and composability.

The secret to efficiently building ‘large’ things is generally to avoid building them in the first place

- Addy Osmani

Composition/Componentization

Oct. 10, 2014: Stack team does Amazing presentation on Componentized Architecture.

Oct. 23, 2014: Angular team announces Angular 2 with new componentized architecture featuring "component trees" (composed components).

May, 2013: React initial public release featuring a composed componentized architecture, virtual DOM and one-way data flow.

Nov. 14, 2013: Polymer, a Web Component framework by Google, launches publicly, featuring components.

Aug. 13, 2015: Ember, already using components as a core principle, releases 2.0 featuring "data down, actions up" one-way data flow and a virtual DOM tree.

Composition/Componentization

Not only do modern JavaScript frameworks encourage componentization, they are also componentizing themselves.

Angular2: core + router + zone.js + animate + http

Polymer: ShadowDOM + Custom Elements + HTML Templates + HTML Imports + Polymer Sugar

React: React + ReactDOM + ReactRouter + Redux

Ember: HTMLBars + EmberMetal + EmberRouting

Componentization

Rules of Componentization

  • Singe Responsibility (not single use case)
  • Self containment ("pure" functions)
  • Clear and strict context boundaries (Black boxing)
  • Reusable

Componentization

Single Responsibility Principle

Single responsibility doesn't mean "It does one thing," it means "It does one type of thing." This distinction is the difference between successful and unsuccessful componentization.

State

UI

Component

{}

No external influences.

Self Containment

Componentization

State

UI

Component

{}

Componentization

Strict Context Boundries

Does not influence external things and is blissfully unaware of anything outside it's strict context.

  • Repeatable

  • Configurable

  • Extensible

  • Composable

Componentization

Reusability

I think the lack of reusability comes [with] all this implicit environment... You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.

Composition

Composition is the process of combining problem set solvers to solve more complex and specific problems.

Composition

Composition is facilitated by componentization and in fact is not possible without it.

This is not composition.

Composition

This is composition

Composition

Think of [components] as lego blocks. You don't necessarily care about the details of how it's made. All you need to know is how to use the lego blocks to build your lego castle. By making small focused [components] you can easily build large complex systems without having to know every single detail of how everything works. Our short term memory is finite.

A

B

Component

Composition

The philosophy of a front-end applicaiton

Ultimately, composition and componentization are philosophies. Philosophies that can be incorporated into any application regardless of the technology used.

Seperation of Concerns

Interactions

Presentation

State

Domain Model

View Model

View

Fetch

Angular Services

Backbone Model

POJO's

Redux

Handlebars Helpers

Ember

Angular Controllers

Backbone View

Flux Store

POJO's

React

Handlebars

Angular Tempaltes

Vue

Riot

Polymer

HTML Strings

The Front-end Landscape

By Cory Brown

The Front-end Landscape

  • 1,247