Building on the Glimmer rendering engine, Ember continues to make performance and stability dual priorities. Let's discuss what the web looks like in 2017 and how Ember is prepared, and can better prepare, to meet new challenges.
5. 1 let spaceship = {
2 mass: 2
3 };
4
5 let acceleration = 2;
6 let force = spaceship.mass * acceleration;
7
8 accelerate(spaceship, force);
6. 1 let spaceship = {
2 mass: 2
3 };
4
5 function deriveForce(mass, acceleration) {
6 return mass * acceleration;
7 }
8
9 let acceleration = 2;
10 let force = deriveForce(spaceship.mass, acceleration);
11
12 accelerate(spaceship, force);
7. āThe purpose of abstraction is not to be
vague, but to create a new semantic level in
which one can be absolutely precise.ā
The Humble Programmer
Edsger Dijkstra 1972
8. 1 let spaceship = {
2 mass: 2
3 };
4
5 function deriveForce(mass, acceleration) {
6 return mass * acceleration;
7 }
8
9 let acceleration = 2;
10 let force = deriveForce(spaceship.mass, acceleration);
11
12 accelerate(spaceship, force);
10. We now come to the decisive step of mathematical
abstraction: we forget about what the symbols stand for.
The mathematician is concerned with the catalogue alone;
he is like the man in the catalogue room who does not
care what books or pieces of an intuitively given
manifold the symbols of his catalogue denote. He need
not be idle; there are many operations which he may
carry out with these symbols, without ever having to
look at the things they stand for.
The Mathematical Way of Thinking
Hermann Weyl 1940
21. ā¢ Online/Ofļ¬ine status
ā¢ Selection API
ā¢ XHR2 / CORS
ā¢ background-color: currentColor
ā¢ All ES5
ā¢ let / const
ā¢ High Resolution Timers
ā¢ MessageChannel
ā¢ Blobs
ā¢ TypedArrays
ā¢ Geolocation
ā¢ Web Sockets
IE11+ WEB FEATURES
22. ā¢ Online/Ofļ¬ine status
ā¢ Selection API
ā¢ XHR2 / CORS
ā¢ background-color: currentColor
ā¢ All ES5
ā¢ let / const
ā¢ High Resolution Timers
ā¢ MessageChannel
ā¢ Blobs
ā¢ TypedArrays
ā¢ Geolocation
ā¢ Web Sockets
ā¢ Web Workers
ā¢ Internationalization API
ā¢ Strict HTTPS Transport
ā¢ HTTP2
ā¢ MP3, AAC, MPEG-4/H.264
ā¢ WOFF
ā¢ SVG, SVG ļ¬lters
ā¢ <input pattern=
ā¢ DNS prefetch
ā¢ Multiple File Selection
ā¢ Viewport sizes (8vw)
ā¢ querySelector, matches
IE11+ WEB FEATURES
23. ā¢ Online/Ofļ¬ine status
ā¢ Selection API
ā¢ XHR2 / CORS
ā¢ background-color: currentColor
ā¢ All ES5
ā¢ let / const
ā¢ High Resolution Timers
ā¢ MessageChannel
ā¢ Blobs
ā¢ TypedArrays
ā¢ Geolocation
ā¢ Web Sockets
ā¢ Web Workers
ā¢ Internationalization API
ā¢ Strict HTTPS Transport
ā¢ HTTP2
ā¢ MP3, AAC, MPEG-4/H.264
ā¢ WOFF
ā¢ SVG, SVG ļ¬lters
ā¢ <input pattern=
ā¢ DNS prefetch
ā¢ Multiple File Selection
ā¢ Viewport sizes (8vw)
ā¢ querySelector, matches
ā¢ File API
ā¢ IndexedDB
ā¢ WebGL
ā¢ dataset
ā¢ <script> defer
ā¢ getBoundingClientRect
ā¢ ::ļ¬rst-line
ā¢ calc()
ā¢ requestAnimationFrame
ā¢ atob / btoa
ā¢ PageTransitionEvent
ā¢ <video>
IE11+ WEB FEATURES
24. ā¢ Online/Ofļ¬ine status
ā¢ Selection API
ā¢ XHR2 / CORS
ā¢ background-color: currentColor
ā¢ All ES5
ā¢ let / const
ā¢ High Resolution Timers
ā¢ MessageChannel
ā¢ Blobs
ā¢ TypedArrays
ā¢ Geolocation
ā¢ Web Sockets
ā¢ Web Workers
ā¢ Internationalization API
ā¢ Strict HTTPS Transport
ā¢ HTTP2
ā¢ MP3, AAC, MPEG-4/H.264
ā¢ WOFF
ā¢ SVG, SVG ļ¬lters
ā¢ <input pattern=
ā¢ DNS prefetch
ā¢ Multiple File Selection
ā¢ Viewport sizes (8vw)
ā¢ querySelector, matches
ā¢ File API
ā¢ IndexedDB
ā¢ WebGL
ā¢ dataset
ā¢ <script> defer
ā¢ getBoundingClientRect
ā¢ ::ļ¬rst-line
ā¢ calc()
ā¢ requestAnimationFrame
ā¢ atob / btoa
ā¢ PageTransitionEvent
ā¢ <video>
ā¢ <audio>
ā¢ Session History
ā¢ <progress>
ā¢ MutationObserver
ā¢ Navigation Timing API
ā¢ <script> async
ā¢ naturalWidth, naturalHeight
ā¢ input event
ā¢ matchMedia
ā¢ crypto.getRandomValues()
ā¢ Viewport sizes (8vw)
ā¢ classList
IE11+ WEB FEATURES
25. ā¢ Online/Ofļ¬ine status
ā¢ Selection API
ā¢ XHR2 / CORS
ā¢ background-color: currentColor
ā¢ All ES5
ā¢ let / const
ā¢ High Resolution Timers
ā¢ MessageChannel
ā¢ Blobs
ā¢ TypedArrays
ā¢ Geolocation
ā¢ Web Sockets
ā¢ Web Workers
ā¢ Internationalization API
ā¢ Strict HTTPS Transport
ā¢ HTTP2
ā¢ MP3, AAC, MPEG-4/H.264
ā¢ WOFF
ā¢ SVG, SVG ļ¬lters
ā¢ <input pattern=
ā¢ DNS prefetch
ā¢ Multiple File Selection
ā¢ Viewport sizes (8vw)
ā¢ querySelector, matches
ā¢ File API
ā¢ IndexedDB
ā¢ WebGL
ā¢ dataset
ā¢ <script> defer
ā¢ getBoundingClientRect
ā¢ ::ļ¬rst-line
ā¢ calc()
ā¢ requestAnimationFrame
ā¢ atob / btoa
ā¢ PageTransitionEvent
ā¢ <video>
ā¢ <audio>
ā¢ Session History
ā¢ <progress>
ā¢ MutationObserver
ā¢ Navigation Timing API
ā¢ <script> async
ā¢ naturalWidth, naturalHeight
ā¢ input event
ā¢ matchMedia
ā¢ crypto.getRandomValues()
ā¢ Viewport sizes (8vw)
ā¢ classList
ā¢ Custom events
ā¢ TTF/OTF
ā¢ CSP 1.0
ā¢ Range
ā¢ page visibility
ā¢ SVG in CSS background
ā¢ 3d transforms
ā¢ Semantic Elements, e.g. <section>
ā¢ AppCache
ā¢ Web Crypto
ā¢ CSS3 multi-column layout
ā¢ console log methods
ā¢ insertAdjacentHTML
ā¢ Session History
IE11+ WEB FEATURES
30. ā¢ Make Ember easier to learn
ā¢ Deliver it to clients in smaller, smarter chunks
ā¢ Do less work on the client
ā¢ Better arrange work on the client
ā¢ Make it easier for addons and contributors to participate
32. ENGINES & LAZY LOADING
ā¢ emberjs/rfcs#10 Merged in April 2016
ā¢ Design cycle was 1.5 years!
ā¢ Additions to Ember were kept minimal, the majority of the
functionality is in the ember-engines addon
ā¢ Further speciļ¬cation for lazy loading in emberjs/rfcs#153
(asset manifest) and emberjs/rfcs#158 (loader service)
ā¢ Support for lazy loading is in ember-engines@0.4.0
33. MODULE UNIFICATION
ā¢ Proceeded by emberjs/rfcs#124, Module Normalization
ā¢ emberjs/rfcs#143 Merged in mid-October
ā¢ Design cycle was 8 months
ā¢ Included building a migration tool for real apps to test our
assumptions about aesthetics (ember-module-migrator)
ā¢ Work on a dynamic version of the resolver begun in ember-
cli/ember-cli#6332
ā¢ Work on improving IDE support in emberjs/ember.js#14430
34. JAVASCRIPT MODULE API
ā¢ emberjs/rfcs#176 opened November 2016, closed 5 days
ago
ā¢ Based on feedback from āmodule shimsā, emberjs/rfcs#68
ā¢ Includes plans for a migration tool via static analysis
ā¢ Was considered for 2.12, but we decided to go slow
35. ROUTER SERVICE
ā¢ emberjs/rfcs#95 was merged November 2016
ā¢ Design cycle a little over a year
ā¢ There have been several partial implementations, but no
complete PR
37. GLIMMER COMPONENTS &
ELEMENT MODIFIERS
ā¢ emberjs/rfcs#60 (Component Uniļ¬cation) closed April
ā¢ emberjs/rfcs#112 (Element Modiļ¬ers) open since January
ā¢ Challenges:
ā¢ Moving from this.attrs to this.args. New two way binding callback API
ā¢ If we migrate to this.args, what happens to the name `didReceiveAttrs`
ā¢ Is there a better way to express recompilation than observers?
ā¢ DOM attributes and props
ā¢ @arg
60. ā¢ Glimmer binary VM and wire format, stack VM
ā¢ Interoperability with ES Classes
ā¢ Lazy evaluation and dead code elimination
ā¢ Fastboot rehydration
ā¢ Critical path rendering
ā¢ Improved RFC automation
ā¢ Improved visibility of feature progress