The Angular team recently released Angular 8, the latest major release of its single page application framework. The release includes a large number of bug fixes, several incremental improvements including differential loading, and a preview for both the Ivy render engine, and the Bazel build system.
Differential loading is a significant update to the way Angular generates and delivers code that can reduce the initial bundle size by up to 20% for modern browsers. To achieve that, the Angular CLI now generates two separate bundles: a modern bundle, which targets browsers that support ES6, and a legacy bundle for older browsers. The decision of which bundle to load will happen in the browser at load time by using the nomodule HTML tag, which prevents modern browsers from executing the tagged script.
The exact composition of the modern bundle is determined by the Browserlist configuration, while legacy browsers get a larger, more complete, set of polyfills. It's worth noting that Differential loading isn't an Angular specific technology, and already exist in some frameworks like Dojo.
Angular 8 also includes several improvements to the Angular CLI which focus on extending its usability. The Builder API (also known as Architect API) allows developers to tap into CLI build processes and add custom operations such as cloud deployment, linting, and testing. The Workspace API provides a way to interact with the angular.json file, which is used by Schematics and allows developers to create custom workflows for the CLI. The Angular CLI in version 8 also simplifies the creation and bundling of Web workers.
Finally, Angular 8 contains several smaller changes that help streamline work and keep Angular up-to-date with current technologies.
These improvements include:
- Update to TypeScript 3.4 which also becomes the minimal required version of Typescript
- Update the syntax for lazy loading of router modules (align to the ES2020 dynamic imports standard)
- Improve the
ngUpgrade
URL handling
The last two significant improvements are not yet ready for production and get hidden behind an opt-in preview flag. Ivy is the next generation of Angular pipeline and rendering engine that offers many significant improvements to the framework. Angular 8 provides an opt-in preview of the Ivy engine which can be enabled by following the Ivy opt-in guide. Bazel is Google's internal build system, that was open sourced back in 2015 and is now getting integrated with Angular. It offers several improvements including incremental builds and tests, support for remote builds, etc. Bazel can be enabled by following the Bazel opt-in guide. It is important to note that while the Angular team seeks feedback on Ivy and Bazel, these features should not currently be considered stable enough for production use.
Angular is open source software available under the MIT license. Contributions are welcome via the Angular Github repository. A complete list of changes in Angular 8 is available in the Angular framework changelog, Angular material changelog, and Angular-CLI changelog.