{"id":2420,"date":"2018-04-09T15:55:07","date_gmt":"2018-04-09T13:55:07","guid":{"rendered":"https:\/\/www.angulararchitects.io\/?p=2420"},"modified":"2018-04-09T15:55:07","modified_gmt":"2018-04-09T13:55:07","slug":"clever-white-space-handling","status":"publish","type":"post","link":"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/","title":{"rendered":"Clever White Space Handling"},"content":{"rendered":"<div class=\"article\">\n<blockquote><p>\nThis post is part of my <a href=\"https:\/\/medium.com\/@ManfredSteyer\/angular-performance-tuning-article-series-6e3c33707b25\">Angular Performance Tuning article series<\/a>. If you looking for ways to make your Angular application faster, you might find the other articles in this series useful too.\n<\/p><\/blockquote>\n<p><strong>Update:<\/strong> This optimization technique has now been merged into Version 4.4.0-rc.0 too.<\/p>\n<p><strong>Update 2:<\/strong> Beginning with Angular 6.0.0-beta.6 this optimization option is activated by default. You can deactivate it using the the configuration entries outlined below.<\/p>\n<p>Although tuning an application\u2019s performance can be difficult, sometimes all we need to do is laying back and waiting for the next version of the used framework. This especially holds true for Angular as the Core Team is working constantly on improving things under the hoods. A good example for this is the conciser code the Angular Compiler emits beginning with Version 4 or the <a href=\"https:\/\/www.angulararchitects.io\/post\/2017\/07\/26\/shrinking-angular-bundles-with-the-angular-build-optimizer.aspx\">Angular Bundle Optimizer<\/a> that transforms code to make it more treeshakable.<\/p>\n<p>On more of this optimization techniques landed with <a href=\"https:\/\/github.com\/angular\/angular\/blob\/master\/CHANGELOG.md#500-beta4-2017-08-16\">5.0.0-beta.4<\/a> about two weeks ago. It allows the compiler to remove unneeded  (consecutive) white spaces from text nodes and to remove even whole text nodes that only contain white space characters. This leads to less code emitted by the AOT compiler and therefore to smaller bundle sizes as well as faster start up times.<\/p>\n<p>In this post I\u2019m describing how to use it, which performance gains I measured when applying to an example application as well as how this approach works under the covers. The <a href=\"https:\/\/github.com\/manfredsteyer\/angular-5-beta.4-removing-white-spaces\">example application<\/a> I\u2019ve used for this can be found in my <a href=\"https:\/\/github.com\/manfredsteyer\/angular-5-beta.4-removing-white-spaces\">GitHub repository<\/a>.<\/p>\n<h2><a id=\"Removing_white_spaces_14\"><\/a>Removing white spaces<\/h2>\n<p>While removing white spaces from HTML is most of the time a safe operation (at least when respecting some rules outlined below), it can also destroy your layout. Because of this, you can opt-out from it. For instance, you could do this on component level by setting the new property <code>preserveWhitespaces<\/code> to <code>true<\/code>:<\/p>\n<pre><code>@Component({\n  selector: 'app-passenger-search',\n  templateUrl: '.\/passenger-search.component.html',\n  styleUrls: ['.\/passenger-search.component.css'],\n  preserveWhitespaces: true\n})\nexport class PassengerSearchComponent  {\n}\n<\/code><\/pre>\n<p>Instead of this, you can also opt-out for your whole application by using the flag <code>preserveWhitespace<\/code> in your <code>tsconfig.app.json<\/code>:<\/p>\n<pre><code>[\u2026]\n\"angularCompilerOptions\": {\n    \"preserveWhitespaces\": true\n}\n[\u2026]\n<\/code><\/pre>\n<p>If you use the Angular CLI please make sure you add this to the file <code>tsconfig.app.json<\/code> and not to your <code>tsconfig.json<\/code>.<\/p>\n<p>In addition to this, you can protect a section within a template by adding the attribute <code>ngPreserveWhitespaces<\/code> to a tag. If you want to spot a space that isn\u2019t allowed to be removed, you can use the pseudo-entity &amp;ngsp;, which is converted to a space in the emitted code. Don\u2019t confuse this with the well known   entity.<\/p>\n<h2><a id=\"Results_for_example_application_44\"><\/a>Results for example application<\/h2>\n<p>When I applied this optimization technique to my <a href=\"https:\/\/github.com\/manfredsteyer\/angular-5-beta.4-removing-white-spaces\">example application<\/a>, I got the following results:<\/p>\n<ul>\n<li>~ 8% reduction in size for the javascript bundle<\/li>\n<li>~ 4% reduction in size for the gzipped javascript bundle<\/li>\n<li>~ 9% faster application startup time<\/li>\n<\/ul>\n<p>As this shows, this approach allows for an appreciable performance gain. This gain we get after \u201cjust\u201d removing white spaces is higher than you might have expected. The next section shows how this is possible.<\/p>\n<h2><a id=\"Under_the_hoods_54\"><\/a>Under the hoods<\/h2>\n<p>To understand why such a high performance gain is possible by \u201cjust\u201d removing white spaces, let\u2019s look at a simple template:<\/p>\n<pre><code>&lt;h1&gt;\n  Search for Passengers \n&lt;\/h1&gt;\n&lt;p&gt;\n  Lorem ipsum dolor sit amet.\n&lt;\/p&gt;\n<\/code><\/pre>\n<p>When we compile this template, the AOT compiler transforms it to JavaScript code:<\/p>\n<pre><code>function View_PassengerSearchComponent_0(_l) {\n  return __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"_37\" \/* \u0275vid *\/](\n      0,\n      [\n        (_l()(), __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"_15\" \/* \u0275eld *\/](\n                     0, null, null, 1, 'h1', [], null, null, null, null, null)),\n        (_l()(), __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"_35\" \/* \u0275ted *\/](\n                     null, [ '\\n  Search for Passenger \\n' ])),\n        (_l()(), __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"_35\" \/* \u0275ted *\/](\n                     null, [ '\\n' ])),\n        (_l()(), __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"_15\" \/* \u0275eld *\/](\n                     0, null, null, 1, 'p', [], null, null, null, null, null)),\n        (_l()(), __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"_35\" \/* \u0275ted *\/](\n                     null, [ '\\n  Lorem ipsum dolor sit amet.\\n' ]))\n      ],\n      null, null);\n}\n<\/code><\/pre>\n<p>As you can see, this code contains a function call for each dom node we need. For instance, there is a function call for the <code>h1<\/code> tag as well one for the <code>p<\/code> tag. In addition to that, there are function calls for text-nodes. When analyzing this, we find characters as well as even a text node that aren\u2019t displayed in the browser due to the way HTML works. Examples are consecutive white spaces as well as empty text nodes like the one between the closing <code>h1<\/code> tag and the opening <code>p<\/code> tag.<\/p>\n<p>When using the discussed technique, the compiler removes these whites spaces or these text nodes. The following image shows a diff between the emitted code above and the code that is created after activating white-space-removal:<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/i.imgur.com\/r3BlH6t.png\" width=\"600\" alt=\"diff between version with and w\/o whitespaces\"><\/p>\n<p>This shows that a whole function call as well as some consecutive white space characters are removed. When we just count the removed lines for the sake of simplicity we see they make up about 10 % of all lines. This explains the reduction in bundle size we\u2019ve faced. Of course, a reduction in function calls means that the Browser can download the bundles faster as well as Angular has less to do when starting the application. Both leads to the improvement of start up performance mentioned above.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>For Better Performance In Angular<\/p>\n","protected":false},"author":9,"featured_media":2997,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2420","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-unkategorisiert"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Clever White Space Handling - ANGULARarchitects<\/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:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Clever White Space Handling - ANGULARarchitects\" \/>\n<meta property=\"og:description\" content=\"For Better Performance In Angular\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/\" \/>\n<meta property=\"og:site_name\" content=\"ANGULARarchitects\" \/>\n<meta property=\"article:published_time\" content=\"2018-04-09T13:55:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2019\/04\/blog-2355684-1280.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"853\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Manfred Steyer, GDE\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@daniel\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Manfred Steyer, GDE\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/\"},\"author\":{\"name\":\"Manfred Steyer, GDE\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/15628efa7af4475ffaaeeb26c5112951\"},\"headline\":\"Clever White Space Handling\",\"datePublished\":\"2018-04-09T13:55:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/\"},\"wordCount\":728,\"publisher\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2019\/04\/blog-2355684-1280.jpg\",\"articleSection\":[\"Unkategorisiert\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/\",\"name\":\"Clever White Space Handling - ANGULARarchitects\",\"isPartOf\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2019\/04\/blog-2355684-1280.jpg\",\"datePublished\":\"2018-04-09T13:55:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/#primaryimage\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2019\/04\/blog-2355684-1280.jpg\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2019\/04\/blog-2355684-1280.jpg\",\"width\":1280,\"height\":853},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.angulararchitects.io\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Clever White Space Handling\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"name\":\"ANGULARarchitects\",\"description\":\"AngularArchitects.io\",\"publisher\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\",\"name\":\"ANGULARarchitects\",\"alternateName\":\"SOFTWAREarchitects\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"width\":644,\"height\":216,\"caption\":\"ANGULARarchitects\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/github.com\/angular-architects\",\"https:\/\/www.linkedin.com\/company\/angular-architects\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/15628efa7af4475ffaaeeb26c5112951\",\"name\":\"Manfred Steyer, GDE\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a0b59539674d8b71ea1c1f4764b11244b5f499203f1d11b40f37d8f3f90be033?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a0b59539674d8b71ea1c1f4764b11244b5f499203f1d11b40f37d8f3f90be033?s=96&d=mm&r=g\",\"caption\":\"Manfred Steyer, GDE\"},\"sameAs\":[\"https:\/\/x.com\/daniel\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Clever White Space Handling - ANGULARarchitects","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.angulararchitects.io\/en\/blog\/clever-white-space-handling\/","og_locale":"en_US","og_type":"article","og_title":"Clever White Space Handling - ANGULARarchitects","og_description":"For Better Performance In Angular","og_url":"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/","og_site_name":"ANGULARarchitects","article_published_time":"2018-04-09T13:55:07+00:00","og_image":[{"width":1280,"height":853,"url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2019\/04\/blog-2355684-1280.jpg","type":"image\/jpeg"}],"author":"Manfred Steyer, GDE","twitter_card":"summary_large_image","twitter_creator":"@daniel","twitter_misc":{"Written by":"Manfred Steyer, GDE","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/#article","isPartOf":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/"},"author":{"name":"Manfred Steyer, GDE","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/15628efa7af4475ffaaeeb26c5112951"},"headline":"Clever White Space Handling","datePublished":"2018-04-09T13:55:07+00:00","mainEntityOfPage":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/"},"wordCount":728,"publisher":{"@id":"https:\/\/www.angulararchitects.io\/en\/#organization"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/#primaryimage"},"thumbnailUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2019\/04\/blog-2355684-1280.jpg","articleSection":["Unkategorisiert"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/","url":"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/","name":"Clever White Space Handling - ANGULARarchitects","isPartOf":{"@id":"https:\/\/www.angulararchitects.io\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/#primaryimage"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/#primaryimage"},"thumbnailUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2019\/04\/blog-2355684-1280.jpg","datePublished":"2018-04-09T13:55:07+00:00","breadcrumb":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/#primaryimage","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2019\/04\/blog-2355684-1280.jpg","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2019\/04\/blog-2355684-1280.jpg","width":1280,"height":853},{"@type":"BreadcrumbList","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/clever-white-space-handling\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.angulararchitects.io\/en\/"},{"@type":"ListItem","position":2,"name":"Clever White Space Handling"}]},{"@type":"WebSite","@id":"https:\/\/www.angulararchitects.io\/en\/#website","url":"https:\/\/www.angulararchitects.io\/en\/","name":"ANGULARarchitects","description":"AngularArchitects.io","publisher":{"@id":"https:\/\/www.angulararchitects.io\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.angulararchitects.io\/en\/#organization","name":"ANGULARarchitects","alternateName":"SOFTWAREarchitects","url":"https:\/\/www.angulararchitects.io\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","width":644,"height":216,"caption":"ANGULARarchitects"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/github.com\/angular-architects","https:\/\/www.linkedin.com\/company\/angular-architects\/"]},{"@type":"Person","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/15628efa7af4475ffaaeeb26c5112951","name":"Manfred Steyer, GDE","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a0b59539674d8b71ea1c1f4764b11244b5f499203f1d11b40f37d8f3f90be033?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a0b59539674d8b71ea1c1f4764b11244b5f499203f1d11b40f37d8f3f90be033?s=96&d=mm&r=g","caption":"Manfred Steyer, GDE"},"sameAs":["https:\/\/x.com\/daniel"]}]}},"_links":{"self":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/2420","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/comments?post=2420"}],"version-history":[{"count":0,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/2420\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/media\/2997"}],"wp:attachment":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/media?parent=2420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/categories?post=2420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/tags?post=2420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}