There are a number of ways to improve Angular application performance, but one sure-fire way to see page load times improve immediately is to move toward JAMstack architecture, and using Scully is a great way to do this.
Scully was created with the intent of being the piece of the JAMstack puzzle Angular developers have been craving. Scully makes it easy to implement statically generating pages to serve for modern (v8 or v9) Angular applications, and has been adopted by companies like 1-800 Contacts.
In order to serve content quickly, static application pages must be generated, served to the browser, and then be bootstrapped by the client. This allows applications to be painted in the browser faster, because we're not waiting on all of our JavaScript to load and then execute, with interactivity not far behind. When it happens on the server, this approach of pre-rendering and serving HTML pages is called server side rendering. When using Scully, this tool handles the pre-rendering during our build process to create static pages to be served from a CDN.
In modern single page applications it's common to have dynamic pages that populate content based on parameters in the URL. Take a look at how to get started using Scully on your Angular application and pre-rendering pages based on dynamic routes in our dev.to post here: https://dev.to/bitovi/server-side-rendering-dynamic-routes-in-angular-with-scully-6m8