{"id":482,"date":"2019-02-13T02:28:00","date_gmt":"2019-02-13T02:28:00","guid":{"rendered":"http:\/\/www.projectimmerse.com\/blog\/?p=482"},"modified":"2020-06-17T06:09:11","modified_gmt":"2020-06-17T06:09:11","slug":"javascripts-defer-vs-async-attribute","status":"publish","type":"post","link":"https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/","title":{"rendered":"Javascript&#8217;s defer vs async attribute"},"content":{"rendered":"<p>Flashbacks of vanilla javascript cloud my mind &#8211; back when we didn&#8217;t have Jquery. All we had was Javascripts&#8217; event listener method to detect whether the entire DOM was loaded before scripts were fired off. <\/p>\n<p>Why was this necessary though? Well, if you&#8217;re a developer you very well know &#8211; page speed. And back in those days, programmers weren&#8217;t so mindful of placing external javascript files &#8211; the head section, footer and I&#8217;ve seen some sprinkled throughout the body. Not optimal at all &#8211; this can have huge negative implications in terms of functionality and speed. <\/p>\n<p><!--more--><\/p>\n<p>So in the beginning, we programmers used something like this to defer scrips from executing. <\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\r\ndocument.addEventListener(&quot;DOMContentLoaded&quot;, function(event) {\r\n    \/\/ Your code to run since DOM is loaded and ready\r\n});\r\n\r\n<\/pre>\n<p>We even used variations of attaching the load event directly onto the window object&#8230;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\r\nwindow.addEventListener('load', \r\n  function() { \r\n    alert('hello!');\r\n  }, false);\r\n\r\n<\/pre>\n<p>Then along came jQuery&#8230;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\r\n$(document).ready(function() {\r\n    console.log(&quot;Ready!&quot;);\r\n});\r\n\r\n<\/pre>\n<p>Don&#8217;t get me wrong these are all awesome &#8211; I to this day still use a variation of these methods depending on the situation. And if you&#8217;re a programmer &#8211; there are a whole lot of situations we run into nowadays. I find that my degree in Economics has helped gain insight on not only the right tool, but the optimal tool for the job. <\/p>\n<p>So in my consulting experience &#8211; I&#8217;ve run into situations where I had direct access to the source code. Meaning, in the context of optimizing a site, ie. page speed. In most cases, the site was small enough that I could safely move external scripts from the header to the footer section &#8211; where they should be. <\/p>\n<p>Now this was all good and dandy during those days &#8211; a lot of sites were powered by your usual HTML, CSS, Javascript and PHP to handle server side processes. But nowadays we&#8217;ve got all sorts of CMS platforms &#8211; namely <a href=\"https:\/\/wordpress.org\/\" title=\"Wordpress\">WordPress<\/a>, <a href=\"https:\/\/www.squarespace.com\/\" title=\"Squarespace\">Squarespace<\/a>, not to mention all eCommerce platforms like <a href=\"https:\/\/www.bigcommerce.com\/\" title=\"BigCommerce\">BigCommerce<\/a> and <a href=\"https:\/\/www.shopify.com\/\" title=\"Shopify\">Shopify<\/a>. Right, what about PHP frameworks like <a href=\"https:\/\/laravel.com\/\" title=\"Laravel\">Laravel<\/a>, <a href=\"https:\/\/symfony.com\/\" title=\"Symfony\">Symfony<\/a>. Then there&#8217;s Javascript frameworks like <a href=\"https:\/\/vuejs.org\/\" title=\"VueJS\">VueJS<\/a> and <a href=\"https:\/\/angularjs.org\/\" title=\"AngularJS\">AngularJS<\/a>. Look, the list goes on &#8211; I&#8217;ve seen them all.<\/p>\n<p>It wouldn&#8217;t be so difficult if you (the programmer) had full control &#8211; you could make changes as you wish. But in the case of consulting &#8211; you run into situations where moving one script could break an entire site. Was the optimization worth it? Furthermore, is minification even worth it? When down the road, you have deep pages that don&#8217;t function the way they did. <\/p>\n<p>So what I propose is a careful assessment of the sites architecture. It all goes back to architecture. But that statement is short lived when it&#8217;s not your architecture and all you have to work with is a bloated site, a bloated architecture. Examples of this are sites that load way too many plugins (ie WordPress), libraries and scripts in an inefficient manner. <\/p>\n<p>Alright back to the &#8220;defer&#8221; attribute &#8211; let me cut to the chase. In situations where I have limited freedom &#8211; I use the &#8220;defer&#8221; attribute. <\/p>\n<p>It&#8217;s usage goes something like this. Be mindful, this only works for external javascript elements.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\r\n&lt;head&gt;\r\n&lt;script src=&quot;script.js&quot; defer&gt;&lt;\/script&gt;\r\n&lt;\/head&gt;\r\n\r\n<\/pre>\n<p>Notice this script is placed in the head section. What this &#8220;defer&#8221; attribute will do is execute after the page (DOM) has completed loading. Pretty awesome. See now we don&#8217;t have to move this script down to the footer section (below the body). Note that I only resort to this when I have limited freedom, or, moving a script would result in breaking the site.<\/p>\n<p>Okay&#8230; now on to it&#8217;s sidekick. Yeah &#8220;defer&#8221; has a sidekick &#8211; the &#8220;async&#8221; method. This one is an interesting entity. <\/p>\n<p>When using &#8220;async&#8221; &#8211; the script is executed asynchronously with the rest of the page (the script will be executed while the page continues the parsing). <\/p>\n<p>Yeah super interesting. I currently don&#8217;t know situations where this is more advantageous than just using the &#8220;defer&#8221; attribute. But if you&#8217;re looking to implement both, here&#8217;s how it&#8217;s done:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\r\n&lt;head&gt;\r\n&lt;script src=&quot;script.js&quot; defer async&gt;&lt;\/script&gt;\r\n&lt;\/head&gt;\r\n\r\n<\/pre>\n<p>Yeah, you just plugin them both in and you&#8217;re good to go. Cheers!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Flashbacks of vanilla javascript cloud my mind &#8211; back when we didn&#8217;t have Jquery. All we had was Javascripts&#8217; event listener method to detect whether the entire DOM was loaded before scripts were fired off. Why was this necessary though? Well, if you&#8217;re a developer you very well know &#8211; page speed. And back in &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Javascript&#8217;s defer vs async attribute&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1148,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-482","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Javascript&#039;s defer vs async attribute - Project Immerse<\/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.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Javascript&#039;s defer vs async attribute - Project Immerse\" \/>\n<meta property=\"og:description\" content=\"Flashbacks of vanilla javascript cloud my mind &#8211; back when we didn&#8217;t have Jquery. All we had was Javascripts&#8217; event listener method to detect whether the entire DOM was loaded before scripts were fired off. Why was this necessary though? Well, if you&#8217;re a developer you very well know &#8211; page speed. And back in &hellip; Continue reading &quot;Javascript&#8217;s defer vs async attribute&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/\" \/>\n<meta property=\"og:site_name\" content=\"Project Immerse\" \/>\n<meta property=\"article:published_time\" content=\"2019-02-13T02:28:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-06-17T06:09:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.projectimmerse.com\/blog\/wp-content\/uploads\/2019\/02\/javascript-defer-vs-async.png\" \/>\n\t<meta property=\"og:image:width\" content=\"750\" \/>\n\t<meta property=\"og:image:height\" content=\"750\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"projectimmerse\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"projectimmerse\" \/>\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.projectimmerse.com\\\/blog\\\/javascripts-defer-vs-async-attribute\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/javascripts-defer-vs-async-attribute\\\/\"},\"author\":{\"name\":\"projectimmerse\",\"@id\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/#\\\/schema\\\/person\\\/c53f2864be524ee6fa08a7e4800dd1e5\"},\"headline\":\"Javascript&#8217;s defer vs async attribute\",\"datePublished\":\"2019-02-13T02:28:00+00:00\",\"dateModified\":\"2020-06-17T06:09:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/javascripts-defer-vs-async-attribute\\\/\"},\"wordCount\":761,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/javascripts-defer-vs-async-attribute\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/javascript-defer-vs-async.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/javascripts-defer-vs-async-attribute\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/javascripts-defer-vs-async-attribute\\\/\",\"url\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/javascripts-defer-vs-async-attribute\\\/\",\"name\":\"Javascript's defer vs async attribute - Project Immerse\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/javascripts-defer-vs-async-attribute\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/javascripts-defer-vs-async-attribute\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/javascript-defer-vs-async.png\",\"datePublished\":\"2019-02-13T02:28:00+00:00\",\"dateModified\":\"2020-06-17T06:09:11+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/#\\\/schema\\\/person\\\/c53f2864be524ee6fa08a7e4800dd1e5\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/javascripts-defer-vs-async-attribute\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/javascripts-defer-vs-async-attribute\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/javascripts-defer-vs-async-attribute\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/javascript-defer-vs-async.png\",\"contentUrl\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/javascript-defer-vs-async.png\",\"width\":750,\"height\":750,\"caption\":\"Javascript\u2019s defer vs async attribute\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/javascripts-defer-vs-async-attribute\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Javascript&#8217;s defer vs async attribute\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/\",\"name\":\"Project Immerse\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/#\\\/schema\\\/person\\\/c53f2864be524ee6fa08a7e4800dd1e5\",\"name\":\"projectimmerse\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4d06955033d6227bfdcf30014e457e4334f7deeb73907de49b65ec2484921931?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4d06955033d6227bfdcf30014e457e4334f7deeb73907de49b65ec2484921931?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4d06955033d6227bfdcf30014e457e4334f7deeb73907de49b65ec2484921931?s=96&d=mm&r=g\",\"caption\":\"projectimmerse\"},\"url\":\"https:\\\/\\\/www.projectimmerse.com\\\/blog\\\/author\\\/projectimmerse\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Javascript's defer vs async attribute - Project Immerse","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.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/","og_locale":"en_US","og_type":"article","og_title":"Javascript's defer vs async attribute - Project Immerse","og_description":"Flashbacks of vanilla javascript cloud my mind &#8211; back when we didn&#8217;t have Jquery. All we had was Javascripts&#8217; event listener method to detect whether the entire DOM was loaded before scripts were fired off. Why was this necessary though? Well, if you&#8217;re a developer you very well know &#8211; page speed. And back in &hellip; Continue reading \"Javascript&#8217;s defer vs async attribute\"","og_url":"https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/","og_site_name":"Project Immerse","article_published_time":"2019-02-13T02:28:00+00:00","article_modified_time":"2020-06-17T06:09:11+00:00","og_image":[{"width":750,"height":750,"url":"https:\/\/www.projectimmerse.com\/blog\/wp-content\/uploads\/2019\/02\/javascript-defer-vs-async.png","type":"image\/png"}],"author":"projectimmerse","twitter_card":"summary_large_image","twitter_misc":{"Written by":"projectimmerse","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/#article","isPartOf":{"@id":"https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/"},"author":{"name":"projectimmerse","@id":"https:\/\/www.projectimmerse.com\/blog\/#\/schema\/person\/c53f2864be524ee6fa08a7e4800dd1e5"},"headline":"Javascript&#8217;s defer vs async attribute","datePublished":"2019-02-13T02:28:00+00:00","dateModified":"2020-06-17T06:09:11+00:00","mainEntityOfPage":{"@id":"https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/"},"wordCount":761,"commentCount":0,"image":{"@id":"https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/#primaryimage"},"thumbnailUrl":"https:\/\/www.projectimmerse.com\/blog\/wp-content\/uploads\/2019\/02\/javascript-defer-vs-async.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/","url":"https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/","name":"Javascript's defer vs async attribute - Project Immerse","isPartOf":{"@id":"https:\/\/www.projectimmerse.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/#primaryimage"},"image":{"@id":"https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/#primaryimage"},"thumbnailUrl":"https:\/\/www.projectimmerse.com\/blog\/wp-content\/uploads\/2019\/02\/javascript-defer-vs-async.png","datePublished":"2019-02-13T02:28:00+00:00","dateModified":"2020-06-17T06:09:11+00:00","author":{"@id":"https:\/\/www.projectimmerse.com\/blog\/#\/schema\/person\/c53f2864be524ee6fa08a7e4800dd1e5"},"breadcrumb":{"@id":"https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/#primaryimage","url":"https:\/\/www.projectimmerse.com\/blog\/wp-content\/uploads\/2019\/02\/javascript-defer-vs-async.png","contentUrl":"https:\/\/www.projectimmerse.com\/blog\/wp-content\/uploads\/2019\/02\/javascript-defer-vs-async.png","width":750,"height":750,"caption":"Javascript\u2019s defer vs async attribute"},{"@type":"BreadcrumbList","@id":"https:\/\/www.projectimmerse.com\/blog\/javascripts-defer-vs-async-attribute\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.projectimmerse.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Javascript&#8217;s defer vs async attribute"}]},{"@type":"WebSite","@id":"https:\/\/www.projectimmerse.com\/blog\/#website","url":"https:\/\/www.projectimmerse.com\/blog\/","name":"Project Immerse","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.projectimmerse.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.projectimmerse.com\/blog\/#\/schema\/person\/c53f2864be524ee6fa08a7e4800dd1e5","name":"projectimmerse","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4d06955033d6227bfdcf30014e457e4334f7deeb73907de49b65ec2484921931?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4d06955033d6227bfdcf30014e457e4334f7deeb73907de49b65ec2484921931?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4d06955033d6227bfdcf30014e457e4334f7deeb73907de49b65ec2484921931?s=96&d=mm&r=g","caption":"projectimmerse"},"url":"https:\/\/www.projectimmerse.com\/blog\/author\/projectimmerse\/"}]}},"_links":{"self":[{"href":"https:\/\/www.projectimmerse.com\/blog\/wp-json\/wp\/v2\/posts\/482","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.projectimmerse.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.projectimmerse.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.projectimmerse.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.projectimmerse.com\/blog\/wp-json\/wp\/v2\/comments?post=482"}],"version-history":[{"count":6,"href":"https:\/\/www.projectimmerse.com\/blog\/wp-json\/wp\/v2\/posts\/482\/revisions"}],"predecessor-version":[{"id":1149,"href":"https:\/\/www.projectimmerse.com\/blog\/wp-json\/wp\/v2\/posts\/482\/revisions\/1149"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.projectimmerse.com\/blog\/wp-json\/wp\/v2\/media\/1148"}],"wp:attachment":[{"href":"https:\/\/www.projectimmerse.com\/blog\/wp-json\/wp\/v2\/media?parent=482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.projectimmerse.com\/blog\/wp-json\/wp\/v2\/categories?post=482"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.projectimmerse.com\/blog\/wp-json\/wp\/v2\/tags?post=482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}