{"id":22056,"date":"2020-05-04T15:17:05","date_gmt":"2020-05-04T15:17:05","guid":{"rendered":"http:\/\/how_to_get_killer_page_performance_with_angular_lazy_loading"},"modified":"2024-06-04T15:39:24","modified_gmt":"2024-06-04T22:39:24","slug":"how_to_get_killer_page_performance_with_angular_lazy_loading","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading","title":{"rendered":"How to Get Killer Page Performance With Angular Lazy Loading"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>Angular is a popular open-source framework that offers a simplified process for building web applications. The framework is based on TypeScript, a superset of JavaScript\u2014with additional features like static typing, interfaces, and classes\u2014that promotes component-based development, ensuring that components are decoupled and easily reusable.<\/p>\n<p>Images are a critical factor of page-load times in most web applications. A common strategy for improving load performance is to <a href=\"https:\/\/cloudinary.com\/blog\/lazy_loading_choosing_the_best_option\">lazy-load<\/a> images, which means waiting to load an image until the viewer scrolls and it actually enters the viewport. This post explains how <a href=\"https:\/\/cloudinary.com\/blog\/advanced_image_component_for_cloudinary_s_front_end_sdks\">lazy loading works in Angular<\/a> and describes how to implement it for your application.<\/p>\n<p><strong>Here are the topics:<\/strong><\/p>\n<ul>\n<li>\n<a href=\"#lazy-loading\">What is lazy loading?<\/a>\n<\/li>\n<li>\n<a href=\"#lazy-loading-angular\">Why should you care about lazy loading in Angular?<\/a>\n<\/li>\n<li>\n<a href=\"#what-ways\">What are the ways in which to lazy-load in Angular?<\/a>\n<\/li>\n<li>\n<a href=\"#how-lazy-load\">How do you implement lazy loading with <code>ngx-loadable<\/code>?<\/a>\n<\/li>\n<li>\n<a href=\"#lazy-load-cloudinary\">How do you lazy-load images in Angular with Cloudinary?<\/a>\n<\/li>\n<\/ul>\n<h3 id=\"lazy-loading\">What Is Lazy Loading?<\/h3> \n<p>Lazy loading is a practice that delays the loading or initialization of elements or components until they are accessed or brought into the viewport, e.g., display the images at the bottom of a page only when the viewer scrolls there.<\/p>\n<h3 id=\"lazy-loading-angular\">Why Should You Care About Lazy Loading in Angular?<\/h3> \n<p>Lazy loading can improve <a href=\"https:\/\/cloudinary.com\/blog\/lazy_loading_for_optimal_performance\">website performance<\/a> by\u2014<\/p>\n<ul>\n<li>\n<strong>Reducing initial load times:<\/strong> Load only the elements in view, reducing the amount of data to be loaded. Typically, the lighter a page, the faster it loads.<\/li>\n<li>\n<strong>Conserving bandwidth:<\/strong> Deliver content only when needed, refraining from sending unnecessary content and saving bandwidth for both the viewers and web servers.<\/li>\n<li>\n<strong>Saving system resources:<\/strong> Process and render code only when needed, saving computing and memory resources.<\/li>\n<\/ul>\n<h3 id=\"what-ways\">What Are the Ways in Which to Lazy-Load in Angular?<\/h3> \n<p>Several Angular component packages are available for implementing lazy loading. Here are two popular ones:<\/p>\n<ul>\n<li>\n<strong><a href=\"https:\/\/mohammedzamakhan.github.io\/ngx-loadable\/#\/home\">ngx-loadable<\/a><\/strong> is an open-source, lightweight package for lazy-loading Angular components. The package contains a simple API that supports loading indicators. When using the module, you need to load it only once regardless of the number of pages for loading and the use frequency.<\/li>\n<li>\n<strong><a href=\"https:\/\/www.npmjs.com\/package\/@herodevs\/hero-loader\">hero-loader<\/a><\/strong> is an open-source package for lazy-loading Angular modules in response to various triggers, including mouseover, click, and route change. The package is an extension of the built-in capability offered by <code>loadChildren<\/code>.<\/li>\n<\/ul>\n<p>Angular supports lazy loading of NgModules out of the box. By default, NgModules are eagerly loaded, meaning that they load immediately when someone accesses the application even if they are not needed then. However, you can create a feature module with the <code>--route<\/code> flag and then configure the route to lazy-load the module, as follows:<\/p>\n<pre class=\"js-syntax-highlighted\"><code>const routes: Routes = [\n  {\n    path: 'customers',\n    loadChildren: () =&amp;gt; import('.\/customers\/customers.module').then(m =&amp;gt; m.CustomersModule)\n  }\n];\n<\/code><\/pre>\n<p>For more details, including the procedure for setting up lazy loading in the application UI, see the <a href=\"https:\/\/angular.io\/guide\/lazy-loading-ngmodules\">Angular documentation<\/a>.<\/p>\n<h3 id=\"how-lazy-load\">How Do You Implement Lazy Loading With ngx-loadable?<\/h3> \n<p>You can incorporate lazy loading into your Angular projects with <code>ngx-loadable<\/code>. Below is a summary of the procedure. For more details, see the <a href=\"https:\/\/medium.com\/@zamamohammed\/announcing-angular-loadable-ngx-loadable-2-2kb-4ef7e6321784\">full tutorial by Zama Khan Mohammed<\/a>. The tutorial\u2019s <a href=\"https:\/\/github.com\/mohammedzamakhan\/ngx-loadable\/tree\/master\/projects\/demo\">source code<\/a> is on GitHub.<\/p>\n<ol>\n<li>\n<p><strong>Install <code>ngx-loadable<\/code>.<\/strong><\/p>\n<p>Install and manage <code>ngx-loadable<\/code> with YARN or npm. Type:<\/p>\n<p><code>npm install ngx-loadable --save<\/code><\/p>\n<p>or:<\/p>\n<p><code>yarn add ngx-loadable<\/code><\/p>\n<\/li>\n<li>\n<p><strong>Add a module with a bootstrapped component.<\/strong><\/p>\n<p>Create a module called <code>login-modal<\/code> with the CLI commands below. To simplify things and avoid extra configuration in <code>ngx-loadable<\/code>, give the module and component the same name and place the module in the <code>src\/app<\/code> folder.<\/p>\n<pre class=\"js-syntax-highlighted\"><code>&amp;gt; ng g m login-modal\n&amp;gt; ng g c login-modal -m login-modal\n<\/code><\/pre>\n<p>Add the component to <code>bootstrap<\/code>, as follows:<\/p>\n<pre class=\"js-syntax-highlighted\"><code>import { NgModule } from '@angular\/core';\nimport { CommonModule } from '@angular\/common';\nimport { LoginModalComponent } from '.\/login-modal.component';\n\n    @NgModule({\n  imports: [\n    CommonModule\n  ],\n  declarations: [LoginModalComponent],\n  bootstrap: [LoginModalComponent]\n})\nexport class LoginModalModule {\n}\n<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>Add the component to the <code>lazyModules<\/code> array.<\/strong><\/p>\n<p>Now add the path of <code>loginModalModule<\/code> to the <code>lazyModules<\/code> array.<\/p>\n<pre class=\"js-syntax-highlighted\"><code>{\n  ...\n  &quot;projects&quot;: {\n      ...\n      &quot;architect&quot;: {\n        &quot;build&quot;: {\n          &quot;options&quot;: {\n            ...\n            &quot;lazyModules&quot;: [\n              &quot;src\/app\/login-modal\/login-modal.module&quot;\n            ]\n          }\n          ...\n      }\n    }\n}\n<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>Lazy-load the login module with <code>ngx-loadable<\/code>.<\/strong><\/p>\n<p>Lazy-load the new module you created with <code>ngx-loadable<\/code>. The code example below preloads <code>loginModalModule<\/code> and displays it on a mouseover. If loading is still in progress, the module displays the message \u201cLoading \u2026.\u201d<\/p>\n<p>Alternatively, use the <code>ngx-perimeter<\/code> flag to preload modules based on how near the mouse is to an element. If the content is in the viewer\u2019s viewpoint, run <code>ngxInViewport<\/code> to show the content.<\/p>\n<\/li>\n<\/ol>\n<iframe\n  src=\"https:\/\/codesandbox.io\/embed\/lazy-loading-demo-gexes?fontsize=14&#038;hidenavigation=1&#038;theme=dark\"\n  style=\"width:75%; height:200px; border:0; border-radius: 4px; overflow:hidden;\"\n  title=\"lazy-loading-demo\"\n  allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr\"\n  sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\">\n<\/iframe>\n<h3 id=\"lazy-load-cloudinary\">How Do You Lazy-Load Images in Angular With Cloudinary?<\/h3> \n<p>Cloudinary is a cloud-based service that simplifies and automates the process of manipulating and delivering images and videos, optimized for all devices regardless of bandwidth. The <a href=\"https:\/\/cloudinary.com\/blog\/advanced_image_component_for_cloudinary_s_front_end_sdks\">Advanced Image component<\/a> in Cloudinary performs many common front-end tasks on images, including lazy loading, <a href=\"https:\/\/cloudinary.com\/blog\/progressive_web_apps_architecture_and_examples\">progressive image optimization<\/a>, placeholding, and according accessibility. With Advanced Image, you can lazy-load images through a placeholder by running just two lines of code after installing the <a href=\"https:\/\/cloudinary.com\/documentation\/angular_integration\">Angular SDK<\/a>, as follows:<\/p>\n<pre class=\"js-syntax-highlighted\"><code>\n   \n\n<\/code><\/pre>\n<ul>\n<li>The <code>loading=\u201dlazy\u201d<\/code> attribute specifies that loading occurs only when the image appears in the viewport.<\/li>\n<li>The <code>cl-placeholder<\/code> tag enables you to define a placeholder that is shown while the image is loading. The <code>type<\/code> attribute has four options: Blur, Pixelate, Vectorize, and Predominant Color.<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/image\/upload\/w_700,c_fill,f_auto,q_auto,dpr_2.0\/Web_Assets\/blog\/lqip.png\" alt=\"LQIP\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1400\" height=\"788\"\/><\/p>\n<p><a href=\"https:\/\/cloudinary.com\/users\/register_free\">Sign up for Cloudinary<\/a> pronto! We offer generous free plans to get you started.<\/p>\n<h2>Want to Learn More About Lazy-Loading?<\/h2>\n<ul>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/lazy_loading_choosing_the_best_option\">Lazy Loading: Choosing the Best Option<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/lazy_loading_javascript_for_high_speed_webpage_performance\">Lazy-Loading JavaScript for High-Speed Webpage Performance<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/lazy_load_react_and_boost_page_performance_for_your_apps\">Lazy-Load React and Boost Page Performance for Your Apps<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/lazy_loading_for_optimal_performance\">Lazy Loading for Optimal Performance<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/blog\/progressive_web_apps_architecture_and_examples\">Progressive Web Apps: Architecture and Examples<\/a>\n<\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":22057,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[25,186],"class_list":["post-22056","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-asset-management","tag-lazy-loading"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>How to Get Killer Page Performance With Angular Lazy Loading<\/title>\n<meta name=\"description\" content=\"Learn what Angular is, why it\u2019s referred to as being \u201cdead,\u201d and how lazy loading can help serve better-quality media to Angular users.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Get Killer Page Performance With Angular Lazy Loading\" \/>\n<meta property=\"og:description\" content=\"Learn what Angular is, why it\u2019s referred to as being \u201cdead,\u201d and how lazy loading can help serve better-quality media to Angular users.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-04T15:17:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-04T22:39:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1649720700\/Web_Assets\/blog\/Lazy-Loading-Angular_220577b475\/Lazy-Loading-Angular_220577b475-png?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"1540\" \/>\n\t<meta property=\"og:image:height\" content=\"847\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"How to Get Killer Page Performance With Angular Lazy Loading\",\"datePublished\":\"2020-05-04T15:17:05+00:00\",\"dateModified\":\"2024-06-04T22:39:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading\"},\"wordCount\":10,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720700\/Web_Assets\/blog\/Lazy-Loading-Angular_220577b475\/Lazy-Loading-Angular_220577b475.png?_i=AA\",\"keywords\":[\"Asset Management\",\"Lazy Loading\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2020\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading\",\"url\":\"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading\",\"name\":\"How to Get Killer Page Performance With Angular Lazy Loading\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720700\/Web_Assets\/blog\/Lazy-Loading-Angular_220577b475\/Lazy-Loading-Angular_220577b475.png?_i=AA\",\"datePublished\":\"2020-05-04T15:17:05+00:00\",\"dateModified\":\"2024-06-04T22:39:24+00:00\",\"description\":\"Learn what Angular is, why it\u2019s referred to as being \u201cdead,\u201d and how lazy loading can help serve better-quality media to Angular users.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720700\/Web_Assets\/blog\/Lazy-Loading-Angular_220577b475\/Lazy-Loading-Angular_220577b475.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720700\/Web_Assets\/blog\/Lazy-Loading-Angular_220577b475\/Lazy-Loading-Angular_220577b475.png?_i=AA\",\"width\":1540,\"height\":847},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Get Killer Page Performance With Angular Lazy Loading\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to Get Killer Page Performance With Angular Lazy Loading","description":"Learn what Angular is, why it\u2019s referred to as being \u201cdead,\u201d and how lazy loading can help serve better-quality media to Angular users.","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:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading","og_locale":"en_US","og_type":"article","og_title":"How to Get Killer Page Performance With Angular Lazy Loading","og_description":"Learn what Angular is, why it\u2019s referred to as being \u201cdead,\u201d and how lazy loading can help serve better-quality media to Angular users.","og_url":"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading","og_site_name":"Cloudinary Blog","article_published_time":"2020-05-04T15:17:05+00:00","article_modified_time":"2024-06-04T22:39:24+00:00","og_image":[{"width":1540,"height":847,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1649720700\/Web_Assets\/blog\/Lazy-Loading-Angular_220577b475\/Lazy-Loading-Angular_220577b475-png?_i=AA","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading"},"author":{"name":"","@id":""},"headline":"How to Get Killer Page Performance With Angular Lazy Loading","datePublished":"2020-05-04T15:17:05+00:00","dateModified":"2024-06-04T22:39:24+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading"},"wordCount":10,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720700\/Web_Assets\/blog\/Lazy-Loading-Angular_220577b475\/Lazy-Loading-Angular_220577b475.png?_i=AA","keywords":["Asset Management","Lazy Loading"],"inLanguage":"en-US","copyrightYear":"2020","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading","url":"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading","name":"How to Get Killer Page Performance With Angular Lazy Loading","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720700\/Web_Assets\/blog\/Lazy-Loading-Angular_220577b475\/Lazy-Loading-Angular_220577b475.png?_i=AA","datePublished":"2020-05-04T15:17:05+00:00","dateModified":"2024-06-04T22:39:24+00:00","description":"Learn what Angular is, why it\u2019s referred to as being \u201cdead,\u201d and how lazy loading can help serve better-quality media to Angular users.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720700\/Web_Assets\/blog\/Lazy-Loading-Angular_220577b475\/Lazy-Loading-Angular_220577b475.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720700\/Web_Assets\/blog\/Lazy-Loading-Angular_220577b475\/Lazy-Loading-Angular_220577b475.png?_i=AA","width":1540,"height":847},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/how_to_get_killer_page_performance_with_angular_lazy_loading#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Get Killer Page Performance With Angular Lazy Loading"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649720700\/Web_Assets\/blog\/Lazy-Loading-Angular_220577b475\/Lazy-Loading-Angular_220577b475.png?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/22056","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=22056"}],"version-history":[{"count":4,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/22056\/revisions"}],"predecessor-version":[{"id":34352,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/22056\/revisions\/34352"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/22057"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=22056"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=22056"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=22056"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}