A look at major features in the Angular Ivy version 9 release

AOT everywhere, dynamic globalisation, strict mode, Bazel, and much more.

Hit me with any questions about the article or Ivy.

Great article Lars! We are all excited with the new possibilities that Ivy will bring us in the future.

Whats the feature that you are expecting the most from future releases?

Thanks!

2 Likes

Thanks for the detailed article. I see that there is a lot of improvements in mulitlingual capabilities in Angular 9. Does it mean that new release has runtime translation now? Do we have ngx-translate features in core now?

1 Like

Hi Zack,

It depends on how you define runtime translation. If lazy-loading translation texts at runtime is what you mean, then yes, it can be done.

Manfred Steyer writes about it on his blog:

Another article to explore:

Hi Nacho,

I would personally hope that component features become available to developers through a public Angular API.

We’re still missing some things to be able to produce what I call tree-shakable components, namely the infamous missing deps component metadata option.

More work is needed to give renderComponent-based applications a good developer experience. We need support for decorator-based providers, necessary dependencies in injectors, and easy routing without modules.

1 Like

Seeing a new type of injectable (platform), it just brings back my question in unpopular issue. Any idea if it’s possible to disable them in unit tests? So that you would have to be explicit? That is to avoid doing integration tests by accident/missing mock

Nice article! Definitely looking forward to upgrade the project and start using typescript 3.7

2 Likes

I was referring to something like this example done using ngx-translate package. https://stackblitz.com/github/ngx-translate/example?file=src%2Fapp%2Fapp.component.ts

Thanks for pointers to those articles. Cheers

2 Likes

Which of that new things are relevant for developer performance ($localize)? And which of that are relevant for Angular itself?

1 Like

Hi Martin,

Sorry, I can’t quite follow what you mean by “developer performance” or how it’s related to the $localize function.

Also, I don’t understand what you mean by “what is relevant for Angular itself”. Would you care to elaborate?

Hi Zack,

I asked the Angular team about runtime language switching and they don’t consider it important, so they won’t be supporting that in the framework itself.

Reasons:

  1. “How often would you want to switch language in a session?”
  2. Performance issues. Ivy would have to be rewritten/changed again to support runtime language switching natively.

Hi FDIM,

Thank you for your question. Yes, Angular version 9 introduces two new provider scopes: 'platform' (one service instance shared between applications in the same page) and 'any' (one service instance per bundle).

Are you asking whether we can disable decorator-based providers when using TestBed?

First of all, I see only little relevant things that help developers. One of them is $locate.

On the other hand i see a lot of things trying to get the angular problem away. Ivy and the future promises, many checks to control angular ecosystem, splitting, lazyloading …

What of all this helps the developer to go an efficient way?

@martin I guess that’s in the eye of the beholder. I don’t need multiple languages, so I don’t care much about globalization in general. On the other hand, I can appreciate that globalization has not gotten much love from Angular, and I see improvements in the version 9 release for various globalization scenarios.

You mention that code-splitting and lazy loading do not help developer performance/efficiency. I’m still not entirely sure what you’re asking about. Lazy loading and codesplitting is about runtime performance and overall responsiveness.

A few thing that I feel increases my productivity are faster tests, better template type checking, strict mode, and AOT compilation during development and testing.

Thank you for your answer, that’s right.

From the perspective of an angular project, everything is better of cource. but once you look at it from the outside, much is being tried to get rid of the disadvantages of angulars. which is also okay.

For example. Ivy is an enabler? I think you know the chart. Bundles of other frameworks are smaller as angulars forecast today. Why we generate so much spezific stuff, and propagete them, and it works general easier. Thats my big feeling.

Both AngularJS and Angular were made for ease of use more than performance. In React, you also have to be aware of the nitty gritty details to optimize performance. It’s the same for Angular. I think the biggest problem related to this is that there’s still no documentation on change detection, dirty checking, NgZone, or change detection strategies.

@FDIM, @zack, @martin thanks for joining the conversations! Would you be comfortable introducing yourself a little, stuff like where or what you work on? Thanks!

Since Angular 5 we were promised that dynamic load of templates will be back (occasionally called “combining AOT and JIT compilation”, but I don’t think it’s the same thing). Anyway, I see a lot of good things in Ivy - but without that our application is crippled. Now I don’t even see it mentioned. Does anybody knows if/when it comes back?

Can you refer me to an example? It has always been possible to bundle the compiler and use it at runtime to compile components.

I am sorry - the example of what? The latest attempt to do what I want is here: https://www.linkedin.com/pulse/compiling-angular-templates-runtime-dima-slivin/ (not for the faint of heart) and it doesn’t work in v9. In AngularJS and in Angular before v5 it was rather strightforward; but then this functionality was removed with the promise of coming back “later”; and now it is not even mentioned :sob:
There is also long multi-year discussion with occasional flamethrowing; but with no solution or even a hint at one: https://github.com/angular/angular/issues/15275
But maybe I misunderstood your question - sorry then!