1. Design for JavaScript will be, not where it is
A. Accept and return Promises, Generators, Web Workers, Service Workers, Web Components, etc. wherever it makes sense. New browser APIs use Promises extensively. Web workers and Service Workers are key to better performance. Web Components are a source of widgets from outside the Enyo community.
i. As a first step, make enyo.Async a “thenable” (
https://promisesaplus.com/) in Enyo 2.7.1, for interoperability with Promises. [I’d implement this myself, but my next open slot is probably in 2017.]
B. Polyfill on older browsers instead of creating new APIs. Seek out and get onboard with proposals that look to become standards, like Promises/A+ did.
2. Target 0.1s response times, 60fps animation, on mobile hardware, without help from Moore’s Law.
A. Human perception is unchanged - apps need to respond within a tenth of a second to be "instantaneous”. (
https://www.nngroup.com/articles/response-times-3-important-limits/ ) Animation needs to be about 60fps. Once these gaps are closed, web apps feel like native - there’s no more catching up to do.
B. We can't depend on Moore's Law to rescue us.
http://arstechnica.com/information-technology/2016/02/moores-law-really-is-dead-this-time/ To take advantage of multiple cores and GPUs, we need core widgets like Panels to use CSS Transitions, the Animation API, and/or Web Workers as core technologies, not just widgets at the fringes like my enyo-animated:
https://github.com/DougReeder/enyo-animated
3. Speed up app launch by allowing asynchronous component setup. Complicated setup could proceed in multiple threads.
A. Examples include a app-specific facade/DAO for a client-side DB (
http://searchablenotes.hominidsoftware.com/ ) and Components that load configuration from a local file or a Service Worker.
B. Components could return a Promise or undefined (as they do now) from the create() method. Their parent would return Promise.all() on an array of the child return values. This promise will resolve when all of the child Promises resolve (Promise.all() works properly with regular values like undefined.) The parent component returns the Promise.all() promise, and can also take action when it resolves. (Is render() the next lifecycle method?)
4. Retain a List with swipeable, drag-to-rearrange items, like enyo.List. (enyo.DataList doesn’t currently offer that.) See
http://webos-ports.org/wiki/Swipe_UI for why this builds on the legacy of webOS.
On Mar 31, 2016, at 8:53 PM, Pre101 <
pre10...@gmail.com> wrote:
> Now that Enyo 2.7 is out the door, we’re focusing on the future. You should go now and read this blog post about our future direction. We look forward to engaging with you here in the group about the content of that post and your ideas for things we should consider.
Doug Reeder
reed...@gmail.com
https://ello.co/dougreeder
https://twitter.com/reeder29
http://reeder29.livejournal.com/
http://hominidsoftware.com