While there are always new ideas that diverge, we’ve seen a fair amount of convergence around the following topics.
ES6+ Features, Transpilation, and Patterns
We have seen widespread adoption during development with ES6+ features, improving the language grammar and efficiency in writing applications. In particular, having native promises, generators, async/await and async functions have greatly improved how we author asynchronous code. And yet due to somewhat inconsistent support for ES6 features in browsers, some ES6 features lagging behind ES5 in performance, and ES modules not having a finalized loader specification, the most common approach is still to transpile most code to ES5, whether with the popular Babel project, or the TypeScript transpiler which also includes support for types and interfaces.
State, a problem everyone has
Whether you follow this approach or one of many others, it’s become clear that state is a big challenge to get right in application architecture, and we’re still in the early stages of having an approach that makes a lot of sense. We’re at the point of having some very nice native language improvements, coupled with strong influences from other functional languages like Elm and PureScript.
Mobile and Progressive web apps
Progressive Web Apps are user experiences that have the reach of the web, and are reliable, fast, and engaging, giving the experience of a very fast mobile app using pure web technologies. It’s a collection of techniques and best practices that are essential for building web apps that are competitive with native mobile apps.
We’re still in the early days of widespread adoption, but the checklist of features and underlying technologies including Service Workers and Web Components are essential to make the web a completely competitive platform for the future.
Rethinking the DOM
The Shadow DOM holds the promise of masking a web component’s underlying DOM from the rest of the page, arguably making it safer and easier to work with CSS across components. Alternative approaches such as CSS modules exist to provide similar benefits to the Shadow DOM.
Overall it’s a very exciting time for improvements in how we work with the DOM. Reducing the time our applications spend rendering and repainting/reflowing during changes to application state, improves how we define and build applications.
2016 was at a minimum the year VR hit the mainstream and AR was popularized via Pokemon Go. Typically, such major changes to the platform take a while to reach the web, but we’re already seeing significant movement in building a robust WebVR API in browsers, with experimental releases already available for Chrome and Firefox browsers.
While we wait for native WebVR APIs, including game controller functionality to evolve, we also have A-Frame and React VR available. A-Frame extends the feature-rich but challenging to use Three.js library (which wraps the low level WebGL library). AFrame provides a DOM-based API for working with WebVR scenes and features, and React VR takes a React-based approach for building WebVR apps.
Where We’re Heading
High Quality WebVR
2016 was mostly a time to start experimenting with WebVR. 2017 is likely to see substantial progress on WebVR implementations, taking it from experiments to something close to production-ready applications.
We remain hopeful that WebVR will prevent the need for Web to native VR intermediaries.
Decorators, a language enhancement that make it possible to annotate and modify classes and properties at design time, were shipped in TypeScript 1.5 to support Angular 2, and are likely to become part of ES8 or ES9. We expect to see significant implementations of decorators amongst popular frameworks. Whilst decorators can significantly reduce the amount of code you need to write, debugging will become a bit more obfuscated by decorator hand-offs. Hopefully developer tools will keep pace with what is effectively a form of AOP on native classes and properties.
Dojo and Intern share a strength which is that they aim to provide a consistent environment for wiring together and configuring applications and testing stacks. As the number of dependencies grows, so does the complexity of how we configure applications. We expect this to continue to be a challenge.
Performance is a constantly moving target and while many things are getting faster, the bottlenecks are changing and we’re constantly looking for ways to improve performance. This year will see even more efforts to improve the way we test and measure performance.
React to Reactive
Ignored for a bit with the emergence of ES6 and reactive programming, now more than ever, we need coherent support for enterprise features. Dojo 2 treats accessibility, internationalization, large data sets, and data visualizations as top priorities to provide a coherent stack for enterprise development, and we’re unlikely to be alone in making these features a high priority while supporting very modern architecture standards.
We also see enterprises increasing embracing cloud computing, in particular AWS and Google Cloud. In particular features like AWS Lambda are particularly interesting to JS applications. We’re also curious to see how voice recognition and machine learning APIs from cloud providers are leveraged for future web applications, as well as features like web payments.