Ember

Despite an undeserved reputation for being difficult to learn, Ember stands out as being the single most productive JavaScript framework. It does this in a number of ways. For a start, there is Ember CLI. Other frameworks have a command line tool of varying degrees of capability, but Ember’s is turned up to 11. It’s a comprehensive development environment, handling scaffolding, boilerplate generation, testing, dependency management, serving, deployment, and the entire build chain. It is lightning fast end helps to enforce (while also benefiting from) Ember’s rigid conventions.

These conventions are another major benefit of Ember, nearly eliminating configuration and redundancy through logical and clearly defined defaults. A lot of Ember goes without saying, making some of it’s code, such as the router, impressively terse while also being clear and expressive.

The near draconian conventions also have another benefit. All Ember apps look the same. They all have the same structure. They all have the same build chain. They all have the same set of features and functionality.

Ember has another feature that is curiously missing in other frameworks: http abstractions and a rich model layer. Most frameworks simply use javascript objects returned from an XHR call as their model. Handling these calls is up to the developer. Handling the equivalent calls for persistence is as well. By contrast, Ember uses Ember Data, essentially an API ORM that abstracts the entire persistence layer. The conventions are handled in an adapter and serializer, meaning persistence calls are as simple as let model = store.find(‘post’, 123) or model.save(). Standard conventions such as REST work out of the box.

Ember is also developing rapidly and progressively. It was an early champion of technologies like ES6 and Promises, both of which are now central to both Ember and Javascript itself. It’s enthusiastically pushing towards web components as well, with the goal of Ember to quickly deprecate its own functionality in favour of built-ins wherever possible.

Recent changes to the framework have given us Glimmer 2, a high performance new view engine that can actually be used separately to the rest of Ember.

Probably the most impressive thing about Ember, however, is its incredible ease of use and overall developer experience.

For example, setting up and installing something like Bootstrap is literally a matter of typing ember install ember-cli-bootstrap, which will pull in and set up Bootstrap. You can begin typing classes and immediately, no need to pull in the css, add it to your build definitions, etc.

An even more impressive example: ember install ember-cli-fastboot

This creates a complete server-side app that runs in NodeJS, making your website isomorphic (or universal) with trivial amounts of effort. And then there’s ember deploy…

Another area Ember has excelled is in preventing JavaScript Fatigue. Many other methods of front-end development have suffered from a rapid pace of change, especially in the area of build tooling. While other frameworks and patterns have fragmented and shifted and changed, Ember with its CLI has remained a place of calm in the storm. Its CLI tool already does what other approaches are awkwardly lurching towards.

Ember’s overall architecture is slightly unusual for a front-end JavaScript framework. But it’s actually near identical to many backend frameworks, including Rails, and Laravel. With only a bit of introduction it’s actually a hugely comprehensible and logical pattern, and a big part of what makes Ember so productive so quickly.