{"id":1911,"date":"2024-01-01T10:03:39","date_gmt":"2024-01-01T09:03:39","guid":{"rendered":"https:\/\/www.thecodecampus.de\/blog\/?p=1911"},"modified":"2025-11-04T11:10:42","modified_gmt":"2025-11-04T10:10:42","slug":"how-to-optimize-performance-of-large-lists-in-angular","status":"publish","type":"post","link":"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/","title":{"rendered":"How to optimize performance of large lists in angular"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">When dealing with extensive lists or tables in Angular, optimizing performance becomes crucial to ensure a smooth user experience. <\/span><span style=\"font-weight: 400;\">In this post we will show you different ways to optimize the performance of large lists in Angular. We will be covering <strong>low hanging fruits<\/strong>, that are fairly easy to implement, two <strong>lazy loading<\/strong> strategies and two <strong>advanced rendering techniques<\/strong>. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">The following steps should <strong>clean up your code<\/strong> and <strong>increase the performance<\/strong> of your grid measurably. <\/span><\/p>\n<h2>Low hanging fruits for optimize performance of large lists<\/h2>\n<h3><b>1. Change detection strategy: OnPush<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Most of the time, the change detection of Angular feels like a nice magic, that makes your life much easier. If you have a large app with a big amount of values though, you will realize that change detection is a complex thing, that can make your app a bit slow sometimes.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If a value in your template is changed, Angular checks <\/span><b>each<\/b><span style=\"font-weight: 400;\"> value in the view for updates. Doing this Angular compares the old value with a supposed new value. Depending on the amount of data this can take a lot of time. To fix this problem, it is possible to <strong>change the c<\/strong><\/span><strong>hange detection strategy<\/strong><span style=\"font-weight: 400;\"> of Angular on the component level. <\/span><\/p>\n<pre class=\"lang:js decode:true\">@Component({\r\n  selector: 'app-my-table',\r\n  templateUrl: '.\/my-table.component.html',\r\n  styleUrls: ['.\/my-table.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})<\/pre>\n<p><span style=\"font-weight: 400;\">After this change, Angular only goes for a deep check if the <\/span><i><span style=\"font-weight: 400;\">input <\/span><\/i><span style=\"font-weight: 400;\">(@Input) reference of a value has changed. Otherwise Angular will only do a references check. If the references of the variable change, Angular will compare both values like mentioned before.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Now you have to care to use immutable objects. Make sure to always create a new object instead of manipulating the old one, so the object gets a new reference and the change detection will work as expected. Using the <\/span><i><span style=\"font-weight: 400;\">OnPush<\/span><\/i><span style=\"font-weight: 400;\"> strategy should significantly reduce the change detection calls.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Angular also provides a way to trigger the change detection programmatically. It might be useful to trigger the change detection every few seconds programmatically, instead of triggering the change detection automatically every time a value has changed. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Therefore take a look at this snippet:<\/span><\/p>\n<pre class=\"lang:js decode:true\">import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular\/core';\r\n\r\n@Component({\r\n  selector: 'app-my-table',\r\n  templateUrl: '.\/my-table.component.html',\r\n  styleUrls: ['.\/my-table.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class MyTableComponent implements OnInit {\r\n\r\n  constructor(private cdr: ChangeDetectorRef) {\r\n  }\r\n\r\n  ngOnInit() {\r\n    \/\/ deactivate the change detection for this component and its children\r\n    this.cdr.detach();\r\n\r\n    \/\/ interval for doing the change detection every 5 seconds\r\n    setInterval(() =&gt; {\r\n      this.cdr.detectChanges();\r\n    }, 5000);\r\n  }\r\n\r\n}\r\n<\/pre>\n<p>For more information read <a href=\"https:\/\/netbasal.com\/a-comprehensive-guide-to-angular-onpush-change-detection-strategy-5bac493074a4\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a>.<\/p>\n<p><a href=\"https:\/\/www.thecodecampus.de\/schulungen\/angular\" style=\"display: inline-block;\">\n<picture><source srcset=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/04\/schulungen-tcc_sascha_WP_big.png\" media=\"(min-width: 1024px)\"><source srcset=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/04\/schulungen-tcc_sascha_WP_medium.png\" media=\"(min-width: 600px)\"><img decoding=\"async\" src=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/04\/schulungen-tcc_sascha_WP_small.png\" alt=\"Angular Schulungen\" class=\"alignnone size-full wp-image-38\">\n<\/picture>\n<\/a><\/p>\n<h3><b>2. The <\/b><b><i>updateOn<\/i><\/b><b> property<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Each <\/span><i><span style=\"font-weight: 400;\">FormGroup<\/span><\/i><span style=\"font-weight: 400;\"> has a property called <\/span><i><span style=\"font-weight: 400;\">updateOn. <\/span><\/i><span style=\"font-weight: 400;\">This property determines when the form validation for the current form group is called. Possible values are <\/span><i><span style=\"font-weight: 400;\">change <\/span><\/i><span style=\"font-weight: 400;\">(default), <\/span><i><span style=\"font-weight: 400;\">submit <\/span><\/i><span style=\"font-weight: 400;\">and <\/span><i><span style=\"font-weight: 400;\">blur.<\/span><\/i><\/p>\n<ul>\n<li><i><span style=\"font-weight: 400;\">default: <\/span><\/i><span style=\"font-weight: 400;\">Form validation is always called when the value has changed<\/span><\/li>\n<li><i><span style=\"font-weight: 400;\">blur<\/span><\/i><span style=\"font-weight: 400;\">: Form validation is called when you leave the input field<\/span><\/li>\n<li><i><span style=\"font-weight: 400;\">submit<\/span><\/i><span style=\"font-weight: 400;\">: Form validation is called when you submit the form<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">We change the <em>updateOn<\/em> property to <\/span><i><span style=\"font-weight: 400;\">blur <\/span><\/i><span style=\"font-weight: 400;\">and as result after leaving the input field the change detection is called the first time. Otherwise Angular calls the form validation every time we make changes inside the input field. Depending on the use case of the application the <\/span><i><span style=\"font-weight: 400;\">submit <\/span><\/i><span style=\"font-weight: 400;\">or <\/span><i><span style=\"font-weight: 400;\">blur <\/span><\/i><span style=\"font-weight: 400;\">property could be the better choice and will offer always a better performance.<\/span><\/p>\n<h3><b>3. Where to attach form validators<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">The construction of form validation for a table is based on one parent form group containing <\/span>one form group for each row in the table.<\/p>\n<p><span style=\"font-weight: 400;\">Pay attention that you attach the validation function to the hierarchically lowest point possible. For example, you have a field with the name age which cannot be zero amongst other input fields inside a form group. You should attach your custom form validator only to the <\/span><i><span style=\"font-weight: 400;\">age<\/span><\/i><span style=\"font-weight: 400;\"> field and not to the whole form group it belongs to.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The required function only runs if the value of the age field changes. If we instead attach the validator to the whole group, the form validation function is called when any value of the form group changes.<\/span><\/p>\n<h3><b>4. Pure pipes instead of function calls<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Sometimes you might want to manipulate data in the template directly. We want to avoid unnecessary calls, so we should choose to implement a pipe instead of calling a function inside the template.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Angular just calls pure pipes if the reference (Objects or Arrays) or the value (string, number or boolean) of the current field changes.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If you use a function or an impure pipe, they will calculate a value in every change detection lifecycle.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Check <a href=\"https:\/\/www.youtube.com\/watch?v=I6ZvpdRM1eQ&amp;t=222s\" target=\"_blank\" rel=\"noopener noreferrer\">this<\/a> out for a detailed explanation and a clean example.<\/span><\/p>\n<h3>5. The <b><i>trackBy<\/i><\/b><b> function and Angular 17&#8217;s track expression<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">For example you have a dropDown list with a lot of items (using <em>*ngFor<\/em>). Now you are constantly adding and removing items to the list. Angular always renders the full list, because Angular doesn\u2019t know which item has changed. To avoid unnecessary rendering you can use the <em>trackBy<\/em> function.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"> If you want to read more about <em>trackBy<\/em> click <a href=\"https:\/\/netbasal.com\/angular-2-improve-performance-with-trackby-cc147b5104e5\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a>.<\/span><\/p>\n<p>Since loops iterating over immutable data often lead to performance issues, using a <a href=\"https:\/\/angular.io\/api\/core\/for#-track-and-objects-identity-\">track expression<\/a> has become a mandatory practice for @for loops as of Angular 17.<\/p>\n<h3><b>6. Always unsubscribe<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Always make sure to unsubscribe to avoid memory leaks. For example if you use a subscription for the <em>valueChanges<\/em> of your form group, pay attention to unsubscribe at the latest in the <em>ngOnDestroy<\/em> function. If you don\u2019t, Angular will not throw away the subscription until all subscribers are unsubscribed. You can also use a <a href=\"https:\/\/github.com\/w11k\/ngx-componentdestroyed\" target=\"_blank\" rel=\"noopener noreferrer\">library<\/a>, that takes care about it.<\/span><\/p>\n<h2><\/h2>\n<h2>Lazy loading strategies to optimize large list performance<\/h2>\n<p>Due to their lazy nature these two methods are some of the most effective ways to optimize the performance of large lists in Angular.<\/p>\n<h3><b>1. Virtual scrolling<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Angular provides the opportunity to render only the part of the table, that is currently in view. This way the application needs less resources than for rendering the full table and more resources are available to calculate other stuff.<\/span><\/p>\n<p>See our full implementation <a href=\"https:\/\/www.thecodecampus.de\/blog\/virtual-scrolling-in-angular-7\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"font-weight: 400;\">here.<\/span><\/a><\/p>\n<h3><b>2. Infinite scrolling<\/b><\/h3>\n<p>Virtual scrolling only loads the elements, that are currently visible in the viewport. This comes at the cost of previously loaded elements having to be reloaded when you scroll up again. For this use case we have infinite scrolling. Infinite scrolling loads the list elements laziliy. So if you want to keep the already loaded elements in the DOM, infinite scrolling is your method. One famous example are the rabbit holes of Facebook, Instagram or Youtube that seem to deliver infinite content. The application loads the content when you reach a certain threshold on the bottom of the loaded list.<\/p>\n<p>Check out the package <a href=\"https:\/\/www.npmjs.com\/package\/ngx-infinite-scroll\">ngx-infinite-scroll<\/a> for an Angular implementation for infinite scrolling.<\/p>\n<h2><\/h2>\n<h2>Advanced list performance optimization approaches<\/h2>\n<p>If you are not satisfied yet, let&#8217;s dive into some really advanced approaches to optimize performance of large lists in angular. Whereas the upper solutions mostly rely on tools delivered by angular or angular-material libraries, the following approaches require you to take a look under the hood of the framework. They may not be practicable in most scenarios, but might save your day when there is a very tricky performance problem.<\/p>\n<h3><b>1. Using RxFor<\/b><\/h3>\n<p><a href=\"https:\/\/www.rx-angular.io\/docs\/template\/rx-for-directive\">RxFor<\/a> is a part of the rx-angular\/template package and offers a concurrent strategy for rendering child templates. This approach has a lot of benefits compared to the synchronous nature of <em>*ngFor<\/em> which can block the user experience of your application especially with big data sets or complex templates.<\/p>\n<h3><b>2. Building a custom NgForOf directive<\/b><\/h3>\n<p>In some cases, <em>*ngForOf<\/em> can cause unneccessary DOM updates by recreating whole components and not just updating the template internals only. You can resolve this by creating a tailored NgForOf directive with an <em>_applyChanges<\/em> method where DOM updates are handled in a different way. Read <a href=\"https:\/\/www.telerik.com\/blogs\/blazing-fast-list-rendering-in-angular\">here<\/a> for details on the implementation.<\/p>\n<h2>Conclusion<\/h2>\n<p>So as you can see, there are several ways to optimize the performance of large lists in Angular. Which one you want to use depends on your specific <strong>requirements<\/strong> and <strong>context<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When dealing with extensive lists or tables in Angular, optimizing performance becomes crucial to ensure a smooth user experience. In this post we will show you different ways to optimize the performance of large lists in Angular. We will be covering low hanging fruits, that are fairly easy to implement, two lazy loading strategies and [&#8230;]<br \/><a class=\"meta-big\" href=\"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/\"> READ MORE<\/a><\/p>\n","protected":false},"author":21,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[73,164,149,166,148,163,139,165,151,162,60,150],"tags":[],"class_list":["post-1911","post","type-post","status-publish","format-standard","hentry","category-angular","category-angular-17","category-angular-cdk","category-angular-lists","category-angular-material","category-angular-performance-optimization","category-cdk","category-infinite-scrolling","category-optimization","category-performance","category-typescript","category-virtual-scrolling"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to optimize performance of large lists in angular - 8 pro tips<\/title>\n<meta name=\"description\" content=\"Guide on how to optimize the performance of large lists in Angular by utilizing eight different optimization techniques.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to optimize performance of large lists in angular - 8 pro tips\" \/>\n<meta property=\"og:description\" content=\"Guide on how to optimize the performance of large lists in Angular by utilizing eight different optimization techniques.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Development tips and tricks - theCodeCampus Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-01T09:03:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-04T10:10:42+00:00\" \/>\n<meta name=\"author\" content=\"Lino Fischer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lino Fischer\" \/>\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:\\\/\\\/www.thecodecampus.de\\\/blog\\\/how-to-optimize-performance-of-large-lists-in-angular\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/how-to-optimize-performance-of-large-lists-in-angular\\\/\"},\"author\":{\"name\":\"Lino Fischer\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/person\\\/7c63243aee686ce9d41a044ec967b3ad\"},\"headline\":\"How to optimize performance of large lists in angular\",\"datePublished\":\"2024-01-01T09:03:39+00:00\",\"dateModified\":\"2025-11-04T10:10:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/how-to-optimize-performance-of-large-lists-in-angular\\\/\"},\"wordCount\":1261,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/how-to-optimize-performance-of-large-lists-in-angular\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/schulungen-tcc_sascha_WP_small.png\",\"articleSection\":[\"Angular\",\"Angular 17\",\"Angular CDK\",\"Angular Lists\",\"Angular Material\",\"Angular Performance Optimization\",\"CDK\",\"Infinite Scrolling\",\"Optimization\",\"Performance\",\"TypeScript\",\"Virtual Scrolling\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/how-to-optimize-performance-of-large-lists-in-angular\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/how-to-optimize-performance-of-large-lists-in-angular\\\/\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/how-to-optimize-performance-of-large-lists-in-angular\\\/\",\"name\":\"How to optimize performance of large lists in angular - 8 pro tips\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/how-to-optimize-performance-of-large-lists-in-angular\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/how-to-optimize-performance-of-large-lists-in-angular\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/schulungen-tcc_sascha_WP_small.png\",\"datePublished\":\"2024-01-01T09:03:39+00:00\",\"dateModified\":\"2025-11-04T10:10:42+00:00\",\"description\":\"Guide on how to optimize the performance of large lists in Angular by utilizing eight different optimization techniques.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/how-to-optimize-performance-of-large-lists-in-angular\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/how-to-optimize-performance-of-large-lists-in-angular\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/how-to-optimize-performance-of-large-lists-in-angular\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/schulungen-tcc_sascha_WP_small.png\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/schulungen-tcc_sascha_WP_small.png\",\"width\":720,\"height\":400},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/how-to-optimize-performance-of-large-lists-in-angular\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to optimize performance of large lists in angular\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\",\"name\":\"Web Development tips and tricks - theCodeCampus Blog\",\"description\":\"Tips, tricks, and experiences about developing web and mobile applications with Angular, TypeScript, and Testing.\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\",\"name\":\"theCodeCampus\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch.jpg\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch.jpg\",\"width\":156,\"height\":156,\"caption\":\"theCodeCampus\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/person\\\/7c63243aee686ce9d41a044ec967b3ad\",\"name\":\"Lino Fischer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/lino-fischer-tcc-auhor-scaled-96x96.webp\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/lino-fischer-tcc-auhor-scaled-96x96.webp\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/lino-fischer-tcc-auhor-scaled-96x96.webp\",\"caption\":\"Lino Fischer\"},\"description\":\"Lino is a fullstack developer specializing in Single Page Applications (SPA), with a strong focus on Angular for building dynamic and responsive web solutions. He also works as a trainer in web technologies, sharing his expertise with aspiring developers.\",\"sameAs\":[\"https:\\\/\\\/thecodecampus.de\\\/ueber-uns\\\/trainer\\\/lino-fischer\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/lino-fischer-94643533a\\\/\"],\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/author\\\/lfischer\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to optimize performance of large lists in angular - 8 pro tips","description":"Guide on how to optimize the performance of large lists in Angular by utilizing eight different optimization techniques.","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:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/","og_locale":"en_US","og_type":"article","og_title":"How to optimize performance of large lists in angular - 8 pro tips","og_description":"Guide on how to optimize the performance of large lists in Angular by utilizing eight different optimization techniques.","og_url":"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/","og_site_name":"Web Development tips and tricks - theCodeCampus Blog","article_published_time":"2024-01-01T09:03:39+00:00","article_modified_time":"2025-11-04T10:10:42+00:00","author":"Lino Fischer","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lino Fischer","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/#article","isPartOf":{"@id":"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/"},"author":{"name":"Lino Fischer","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/person\/7c63243aee686ce9d41a044ec967b3ad"},"headline":"How to optimize performance of large lists in angular","datePublished":"2024-01-01T09:03:39+00:00","dateModified":"2025-11-04T10:10:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/"},"wordCount":1261,"commentCount":0,"publisher":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#organization"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/#primaryimage"},"thumbnailUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/04\/schulungen-tcc_sascha_WP_small.png","articleSection":["Angular","Angular 17","Angular CDK","Angular Lists","Angular Material","Angular Performance Optimization","CDK","Infinite Scrolling","Optimization","Performance","TypeScript","Virtual Scrolling"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/","url":"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/","name":"How to optimize performance of large lists in angular - 8 pro tips","isPartOf":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/#primaryimage"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/#primaryimage"},"thumbnailUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/04\/schulungen-tcc_sascha_WP_small.png","datePublished":"2024-01-01T09:03:39+00:00","dateModified":"2025-11-04T10:10:42+00:00","description":"Guide on how to optimize the performance of large lists in Angular by utilizing eight different optimization techniques.","breadcrumb":{"@id":"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/#primaryimage","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/04\/schulungen-tcc_sascha_WP_small.png","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2025\/04\/schulungen-tcc_sascha_WP_small.png","width":720,"height":400},{"@type":"BreadcrumbList","@id":"https:\/\/www.thecodecampus.de\/blog\/how-to-optimize-performance-of-large-lists-in-angular\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.thecodecampus.de\/blog\/"},{"@type":"ListItem","position":2,"name":"How to optimize performance of large lists in angular"}]},{"@type":"WebSite","@id":"https:\/\/www.thecodecampus.de\/blog\/#website","url":"https:\/\/www.thecodecampus.de\/blog\/","name":"Web Development tips and tricks - theCodeCampus Blog","description":"Tips, tricks, and experiences about developing web and mobile applications with Angular, TypeScript, and Testing.","publisher":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.thecodecampus.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.thecodecampus.de\/blog\/#organization","name":"theCodeCampus","url":"https:\/\/www.thecodecampus.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch.jpg","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch.jpg","width":156,"height":156,"caption":"theCodeCampus"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/person\/7c63243aee686ce9d41a044ec967b3ad","name":"Lino Fischer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/11\/lino-fischer-tcc-auhor-scaled-96x96.webp","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/11\/lino-fischer-tcc-auhor-scaled-96x96.webp","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/11\/lino-fischer-tcc-auhor-scaled-96x96.webp","caption":"Lino Fischer"},"description":"Lino is a fullstack developer specializing in Single Page Applications (SPA), with a strong focus on Angular for building dynamic and responsive web solutions. He also works as a trainer in web technologies, sharing his expertise with aspiring developers.","sameAs":["https:\/\/thecodecampus.de\/ueber-uns\/trainer\/lino-fischer","https:\/\/www.linkedin.com\/in\/lino-fischer-94643533a\/"],"url":"https:\/\/www.thecodecampus.de\/blog\/author\/lfischer\/"}]}},"_links":{"self":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/1911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/comments?post=1911"}],"version-history":[{"count":34,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/1911\/revisions"}],"predecessor-version":[{"id":3576,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/1911\/revisions\/3576"}],"wp:attachment":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/media?parent=1911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/categories?post=1911"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/tags?post=1911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}