{"id":3040,"date":"2019-12-19T17:49:06","date_gmt":"2019-12-19T17:49:06","guid":{"rendered":"https:\/\/ionicframework.com\/blog\/?p=3040"},"modified":"2019-12-20T14:51:51","modified_gmt":"2019-12-20T14:51:51","slug":"angular-9-0-0-and-ivy-improvements","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements","title":{"rendered":"Angular 9.0.0 and Ivy improvements"},"content":{"rendered":"<p>One of the biggest updates in the pipeline right now is the upcoming release of Angular 9.0.0. Currently in RC, Angular 9.0 will hopefully ship early next year. But this release includes so much that I thought it required a post to highlight some of the most important updates. Now for Ionic devs, why should they care about this? Well given that most apps currently are built with Angular and Ionic, any improvements to the overall ecosystem should always be welcomed! But given the goals of Angular 9.0, this directly impacts (in a positive way) Ionic be being able to ship faster and smaller apps, in faster manner. For reference, we&#8217;ll be looking at the Angular version of the Star Track demo app &#8211; built with Ionic 4 and Angular &#8211; and checking out the improvements.<\/p>\n<p><!--more--><\/p>\n<h2>Ivy By Default<\/h2>\n<p>One of the biggest improvements to Angular coming in 9.0 is that Ivy is enabled by default. Ivy is Angular&#8217;s new renderer. A super high level overview is that Ivy enables apps to only require pieces of the render that they actually need, instead of the whole thing. This means that our final output will be smaller, which is always better for performance. It&#8217;s important to note, that Ivy won&#8217;t make your components\/app significantly smaller if you&#8217;re using every feature available to Angular. But there are noticeable improvements to the <code>main.js<\/code> chunk of an app.<\/p>\n<p>For comparison, let\u2019s look at the build output from Star Track with Ivy enabled and with it disabled. We\u2019ll compare the size of the <code>main.js<\/code> file, which is mostly going to be Angular specific code.<\/p>\n<pre><code class=\"language-bash\"># Ivy disabled\n$ ng build --prod\n...\nchunk {10} main-es2015.d03d9cadf1579320f520.js (main) 537 kB [initial] [rendered]\nchunk {10} main-es5.d03d9cadf1579320f520.js (main) 628 kB [initial] [rendered]\n...\n\n\n# Ivy enabled\n$ ng build --prod\n...\nchunk {10} main-es2015.bfc9e260b847bc2b02fc.js (main) 465 kB [initial] [rendered]\nchunk {10} main-es5.bfc9e260b847bc2b02fc.js (main) 551 kB [initial] [rendered]\n..\n<\/code><\/pre>\n<p>From 537kb\/628kb without Ivy, to 465kb\/551kb with it! Note that Star Track is using almost every feature available from Angular, so delta is a bit smaller, but still a welcomed improvement!<\/p>\n<p>Now Ivy has been around for sometime in earlier release, but always as an opt-in feature. With 9.0, however, Ivy is enabled by default and developers need to opt-out manually. If Ivy is so great, why would developers need to opt-out of it? Well, as this is part of a new major version, there are bound to be some breaking changes here and there. Most of these are not change that app developers need to worry themselves with, but something that component authors would need to deal with. If you&#8217;re using third-party components\/packages that have not updated, you&#8217;ll want to opt-out of Ivy for now, and open an issue (or better yet, a pull request) against the repo.<\/p>\n<p>Ionic itself will be ready for Ivy when Angular 9.0 is shipped. I&#8217;ve been following along and making the necessary updates needed. We recently have merged a <a href=\"https:\/\/github.com\/ionic-team\/ionic\/pull\/19515\">pull request<\/a> and have been testing a build of Ionic and Angular 9.0.<\/p>\n<h2>EntryComponents&#8230;BYE BYE BYE<\/h2>\n<p>If you&#8217;ve been working with Angular for some time now, you know that one of the most frustrating things to deal with are <code>entryComponents<\/code>. <code>entryComponents<\/code>, for the uninitiated, are components that Angular will load imperatively and not through a template. For Ionic, this means overlay components like Modals and Popovers make heavy use of <code>entryComponent<\/code> for figuring out what to actually render. From a users perspective, there&#8217;s often a bit of a hiccup when working with Modals\/Popovers. The process typically goes:<\/p>\n<ul>\n<li>Generate a new component<\/li>\n<li>Splitting it out into its own module<\/li>\n<li>Attempt to load the component in an overlay<\/li>\n<li>Get an obscure error about a Module Factory<\/li>\n<li>Realize you forgot to add setup entryComponents<\/li>\n<\/ul>\n<p>This was such a common issue that we even modified the component schematic from Angular to include options for auto-adding components to <code>entryComponents<\/code>. Thankfully, with 9.0, this is a thing of the past!<\/p>\n<p>With the way components are compiled (thanks to Ivy), <code>entryComponent<\/code>s are no longer needed. So Modals and Popovers just become much easier to think about.<\/p>\n<h2>CLI Improvements<\/h2>\n<p>In addition to improvements coming to the framework itself, Angular&#8217;s CLI is also getting some improvements as well. For starters, when serving your app, the app will automatically be built using AOT. This is a great improvement as we no longer have to deal with different environments for our apps. For example; you serve your app with <code>ionic serve<\/code> or <code>ng serve<\/code> and the app builds fine. There are no errors, the app loads, all is well! But, when you go to deploy and do a production build, an error appears. Why is the error there and why did it show up only during production? Well due to how components are built, AOT often is able to find potential errors before they happen at run time. Say you have a click handler like so:<\/p>\n<pre><code class=\"language-html\">&lt;ion-content&gt;\n  &lt;h1&gt;Click the button&lt;\/h1&gt;\n  &lt;ion-button (click)=&quot;logEvent($event)&quot;&gt;Click me&lt;\/ion-button&gt;\n&lt;\/ion-content&gt;\n<\/code><\/pre>\n<p>And the component class looks like so:<\/p>\n<pre><code class=\"language-ts\">@Component({...})\nexport class MyComponent{\n\n  constructor(){...}\n\n  logevent(event: any){\n    console.log(event)\n  }\n}\n\n<\/code><\/pre>\n<p>The small error here is that the click handler is for <code>logEvent<\/code>, but the actual method is called <code>logevent<\/code>. This would result in a runtime error, which we do not want. Thanks to being able to run AOT when running serve, we can now catch small errors like this and get meaningful feedback before they ever happen.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1478\" height=\"419\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-11-at-3.04.33-PM.png\" alt=\"\" class=\"aligncenter size-full wp-image-3041 lazyload\" data-srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-11-at-3.04.33-PM.png 1478w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-11-at-3.04.33-PM-300x85.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-11-at-3.04.33-PM-768x218.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-11-at-3.04.33-PM-1024x290.png 1024w\" data-sizes=\"auto, (max-width: 1478px) 100vw, 1478px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 1478px; --smush-placeholder-aspect-ratio: 1478\/419;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1478\" height=\"419\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-11-at-3.04.33-PM.png\" alt=\"\" class=\"aligncenter size-full wp-image-3041\" srcset=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-11-at-3.04.33-PM.png 1478w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-11-at-3.04.33-PM-300x85.png 300w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-11-at-3.04.33-PM-768x218.png 768w, https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/Screen-Shot-2019-12-11-at-3.04.33-PM-1024x290.png 1024w\" sizes=\"auto, (max-width: 1478px) 100vw, 1478px\" \/><\/noscript><\/p>\n<p>Another improvement is with differential builds. In previous releases, the Angular CLI would perform two different builds, on for ES5 environments and one for ES2015. This process produced the ES5 builds first, then would go back and rebuild the app for ES2015, which could make your production builds take a long time if the app was rather large. With 9.0, the CLI will now change how this is done. Instead of building the ES5 version, the CLI will do a ES2015 build of your app first. From there, that ES2015 build will go through a much quick build process to produce a ES5 build with the necessary polyfills. This is a small and subtle change, but can make your build time much faster!<\/p>\n<h2>Parting Thoughts<\/h2>\n<p>Angular 9.0 is still in RC (RC6) as of now and most likely won&#8217;t be shipping before the year is over (good news IMO). But with all the improvements we&#8217;ve gone over here, Angular 9.0 will be a welcome update that should help every developer be successful! Cheers \ud83c\udf7b<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of the biggest updates in the pipeline right now is the upcoming release of Angular 9.0.0. Currently in RC, Angular 9.0 will hopefully ship early next year. But this release includes so much that I thought it required a post to highlight some of the most important updates. Now for Ionic devs, why should [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":3042,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"publish_to_discourse":"","publish_post_category":"","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"","discourse_permalink":"","wpdc_publishing_response":"","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,121],"tags":[60,3,5,79,22],"class_list":["post-3040","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-all","category-engineering","tag-angular","tag-ionic","tag-open-source","tag-performance","tag-progressive-web-apps"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.0 (Yoast SEO v23.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Angular 9.0.0 and Ivy improvements - Ionic Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Angular 9.0.0 and Ivy improvements\" \/>\n<meta property=\"og:description\" content=\"One of the biggest updates in the pipeline right now is the upcoming release of Angular 9.0.0. Currently in RC, Angular 9.0 will hopefully ship early next year. But this release includes so much that I thought it required a post to highlight some of the most important updates. Now for Ionic devs, why should [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-12-19T17:49:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-12-20T14:51:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/angular-ivy-ionic-1024x563.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"563\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Mike Hartington\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mhartington\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mike Hartington\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements\"},\"author\":{\"name\":\"Mike Hartington\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b\"},\"headline\":\"Angular 9.0.0 and Ivy improvements\",\"datePublished\":\"2019-12-19T17:49:06+00:00\",\"dateModified\":\"2019-12-20T14:51:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements\"},\"wordCount\":1008,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/angular-ivy-ionic.png\",\"keywords\":[\"Angular\",\"Ionic\",\"Open Source\",\"performance\",\"Progressive Web Apps\"],\"articleSection\":[\"All\",\"Engineering\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements\",\"url\":\"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements\",\"name\":\"Angular 9.0.0 and Ivy improvements - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/angular-ivy-ionic.png\",\"datePublished\":\"2019-12-19T17:49:06+00:00\",\"dateModified\":\"2019-12-20T14:51:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/angular-ivy-ionic.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/angular-ivy-ionic.png\",\"width\":1600,\"height\":880},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Angular 9.0.0 and Ivy improvements\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ionic.io\/blog\/#website\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"name\":\"ionic.io\/blog\",\"description\":\"Build amazing native and progressive web apps with the web\",\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ionic.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ionic.io\/blog\/#organization\",\"name\":\"Ionic\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"width\":1920,\"height\":854,\"caption\":\"Ionic\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/ionicframework\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b\",\"name\":\"Mike Hartington\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png\",\"caption\":\"Mike Hartington\"},\"description\":\"Director of Developer Relations\",\"sameAs\":[\"https:\/\/twitter.com\/mhartington\",\"https:\/\/x.com\/mhartington\"],\"url\":\"https:\/\/ionic.io\/blog\/author\/mike\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Angular 9.0.0 and Ivy improvements - Ionic Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements","og_locale":"en_US","og_type":"article","og_title":"Angular 9.0.0 and Ivy improvements","og_description":"One of the biggest updates in the pipeline right now is the upcoming release of Angular 9.0.0. Currently in RC, Angular 9.0 will hopefully ship early next year. But this release includes so much that I thought it required a post to highlight some of the most important updates. Now for Ionic devs, why should [&hellip;]","og_url":"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements","og_site_name":"Ionic Blog","article_published_time":"2019-12-19T17:49:06+00:00","article_modified_time":"2019-12-20T14:51:51+00:00","og_image":[{"width":1024,"height":563,"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/angular-ivy-ionic-1024x563.png","type":"image\/png"}],"author":"Mike Hartington","twitter_card":"summary_large_image","twitter_creator":"@mhartington","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Mike Hartington","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements"},"author":{"name":"Mike Hartington","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b"},"headline":"Angular 9.0.0 and Ivy improvements","datePublished":"2019-12-19T17:49:06+00:00","dateModified":"2019-12-20T14:51:51+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements"},"wordCount":1008,"commentCount":0,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/angular-ivy-ionic.png","keywords":["Angular","Ionic","Open Source","performance","Progressive Web Apps"],"articleSection":["All","Engineering"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements","url":"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements","name":"Angular 9.0.0 and Ivy improvements - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/angular-ivy-ionic.png","datePublished":"2019-12-19T17:49:06+00:00","dateModified":"2019-12-20T14:51:51+00:00","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/angular-ivy-ionic.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/angular-ivy-ionic.png","width":1600,"height":880},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/angular-9-0-0-and-ivy-improvements#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Angular 9.0.0 and Ivy improvements"}]},{"@type":"WebSite","@id":"https:\/\/ionic.io\/blog\/#website","url":"https:\/\/ionic.io\/blog\/","name":"ionic.io\/blog","description":"Build amazing native and progressive web apps with the web","publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ionic.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ionic.io\/blog\/#organization","name":"Ionic","url":"https:\/\/ionic.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","width":1920,"height":854,"caption":"Ionic"},"image":{"@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/ionicframework"]},{"@type":"Person","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b","name":"Mike Hartington","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png","caption":"Mike Hartington"},"description":"Director of Developer Relations","sameAs":["https:\/\/twitter.com\/mhartington","https:\/\/x.com\/mhartington"],"url":"https:\/\/ionic.io\/blog\/author\/mike"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2019\/12\/angular-ivy-ionic.png","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/3040","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=3040"}],"version-history":[{"count":0,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/3040\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/3042"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=3040"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=3040"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=3040"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}