{"id":113561,"date":"2023-11-15T00:26:24","date_gmt":"2023-11-15T00:26:24","guid":{"rendered":"https:\/\/showbizztoday.com\/index.php\/2023\/11\/15\/the-what-why-and-how-of-mastering-app-size\/"},"modified":"2023-11-15T00:26:25","modified_gmt":"2023-11-15T00:26:25","slug":"the-what-why-and-how-of-mastering-app-size","status":"publish","type":"post","link":"https:\/\/showbizztoday.com\/index.php\/2023\/11\/15\/the-what-why-and-how-of-mastering-app-size\/","title":{"rendered":"The What, Why, and How of Mastering App Size"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div>\n        <!-- post title --><\/p>\n<div class=\"posted-by\">\n            <img decoding=\"async\" src=\"https:\/\/engineering.atspotify.com\/wp-content\/themes\/theme-spotify\/images\/icon.png\" alt=\"\"\/><\/p>\n<p>&#13;<br \/>\n                <span class=\"date\">November 14, 2023<\/span>&#13;<br \/>\n                <span class=\"author\">&#13;<br \/>\n                    Published by Viktor Petrovski (Android Engineer), Dmitry Povolotskyi (Senior iOS Engineer), and Bruno Rocha (Senior iOS Engineer)                <\/span>&#13;\n            <\/p>\n<\/p><\/div>\n<p>        <!-- post details --><\/p>\n<div class=\"img-holder\">\n            <!-- post thumbnail --><\/p>\n<p>                                                <a href=\"https:\/\/engineering.atspotify.com\/2023\/11\/the-what-why-and-how-of-mastering-app-size\/\" title=\"The What, Why, and How of Mastering App Size\" target=\"_blank\" rel=\"noopener\">&#13;<br \/>\n                        <img src=\"https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image5.png\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" decoding=\"async\" fetchpriority=\"high\" srcset=\"https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image5.png 1999w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image5-250x123.png 250w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image5-700x344.png 700w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image5-768x378.png 768w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image5-1536x755.png 1536w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image5-120x59.png 120w\" sizes=\"(max-width: 1999px) 100vw, 1999px\"\/>                    <\/a><br \/>\n                        <!-- \/post thumbnail -->\n        <\/div>\n<p>        <!-- \/post title --><\/p>\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n<p>Our each day duties as engineers typically contain implementing new functionalities. Existing customers get to take pleasure in the advantages of those options, new customers are enticed to enroll in the app, and we get to write down extra code. At first look, it seems to be an ideal symbiotic relationship \u2014 a win-win-win state of affairs the place everyone\u2019s pleased and nothing goes improper, proper?<\/p>\n<p>But generally a shiny new function brings extra hurt than good. The cause is straightforward \u2014 software dimension. Any addition to the appliance \u2014 be it code for a brand new function, a picture useful resource for a brand new button and even assist for a brand new localization \u2014 contributes to the rise of the appliance\u2019s dimension. You might ask, \u201cIs this really a problem in our modern world?\u201d We would argue that it&#8217;s.<\/p>\n<h3 class=\"wp-block-heading\">So, what precisely is app dimension?<\/h3>\n<p>While the reply could seem easy, it really isn\u2019t that easy. We can speak about app sizes in no less than 4 methods:<\/p>\n<ol>\n<li><strong>Download dimension:<\/strong><br \/>The dimension of the app when downloading the app from the consumer\u2019s app retailer, i.e., the quantity of knowledge transferred over the web. To switch as little as doable over the web the app obtain dimension is compressed.<\/li>\n<li><strong>Install dimension:<\/strong><br \/>The dimension of the app instantly after set up on a cell gadget, i.e., the quantity of knowledge saved on disk after an app has been put in. To have the ability to use the appliance, the app set up dimension is the content material of the appliance in uncompressed type.<\/li>\n<li><strong>Storage dimension:<\/strong><br \/>The dimension of the app when it&#8217;s in use, i.e., the set up dimension plus the area taken up by varied caches (audio information, photographs, and so forth.) saved on the gadget.<\/li>\n<li><strong>Update dimension:<\/strong><br \/>The dimension of the app when downloading an replace from the App Store or Play Store. This may be smaller than obtain dimension, relying on how a lot of the app has modified.<\/li>\n<\/ol>\n<p>Each of those app sizes impacts customers in another way, however we are able to usually categorize their impacts underneath two domains: community associated and storage associated.<\/p>\n<h3 class=\"wp-block-heading\">Why is app dimension so vital?<\/h3>\n<p>In the digital age, an increasing number of communities can embrace quick, reasonably priced cell connections, with ubiquitous Wi-Fi entry in cities and limitless fiber connections in properties, together with as much as 1TB of space for storing on smartphones and tablets. While that is true for some, our knowledge reveals {that a} substantial variety of people in rising markets use older-generation smartphones with much less space for storing \u2014 e.g., iPhone 6s with 16GB of space for storing, a portion of which is already claimed by iOS itself. Consequently, these customers are pressured to decide on which content material is most beneficial to them and may be saved on their units. Given that rising markets account for a staggering 85% of the world\u2019s inhabitants, app dimension turns into exponentially extra vital for our customers throughout the globe. While these challenges could seem theoretical, we possess knowledge that show how actual these points are.\u00a0<\/p>\n<p>Google performed an <a href=\"https:\/\/medium.com\/googleplaydev\/shrinking-apks-growing-installs-5d3fcba23ce2\" target=\"_blank\" rel=\"noopener\">experiment<\/a> offering customers with an identical builds of apps, artificially inflated in dimension. The experiment revealed that for each 6MB enhance to an app\u2019s dimension, the app\u2019s installation-conversion charge decreased by 1%. The implications are profound, resulting in a mess of missed alternatives.<\/p>\n<p>However, there exists a facet of app dimension that&#8217;s much less obvious however equally consequential.<\/p>\n<p>We typically hear about world warming and the consequences automobiles, cows, and energy vegetation have on it, however the results of our apps \u2014 not simply utilizing apps however downloading updates, as effectively \u2014 aren\u2019t often related to this situation. Every week, hundreds of thousands of customers obtain new variations of their apps. For instance, we discovered that Spotify apps (iOS and Android) in 2022 have been up to date greater than 20 billion occasions. Multiply this quantity by the obtain dimension of the apps, and also you\u2019ll get a staggering 930+ petabytes of community site visitors. We can map this site visitors to the ability consumption for transmission. Utilizing the <a href=\"https:\/\/theshiftproject.org\/en\/article\/unsustainable-use-online-video\/\" target=\"_blank\" rel=\"noopener\">one-byte mannequin<\/a> developed by the Shift Project, we discovered that transferring one byte by the community consumes 1.52e-10 kilowatt-hours (kWh) for Wi-Fi and eight.84e-10 kWh for cell. So even when we assume an optimistic state of affairs of 100% Wi-Fi utilization, this site visitors interprets to a minimal energy consumption of roughly 150,000,000 kWh. There is not any exact option to convert this to CO<sub>2<\/sub> emission, however we are able to take <a href=\"https:\/\/www.epa.gov\/energy\/greenhouse-gases-equivalencies-calculator-calculations-and-references\" target=\"_blank\" rel=\"noopener\">EPA knowledge for 2019<\/a> and deduct that this equates to round 65,000 tonnes of CO<sub>2<\/sub>.<\/p>\n<p>To put this determine into perspective\u00a0 \u2014 65,000 tons of CO<sub>2<\/sub> is roughly equal to the emission generated by 65,000 people taking a spherical journey flight between London and New York. So even when we lower the app dimension of each our apps by simply 1MB, we\u2019d scale back our yearly carbon footprint by 560 tons of CO<sub>2<\/sub> yearly. By making our apps smaller we\u2019re not solely serving to our customers avoid wasting area on their units, but additionally serving to make our planet a bit cooler.<\/p>\n<h2 class=\"wp-block-heading\">App-size security nets<\/h2>\n<p>To guard towards uncontrolled enhance in app dimension, we\u2019ve included security nets into varied factors of our improvement course of.<\/p>\n<p><strong>Pre-merge course of:<\/strong><\/p>\n<p>Every time somebody initiates a pull request (PR) in our shopper repositories, an automated test swings into motion to guage how this PR impacts app dimension. These checks are a compulsory a part of CI, and the code can\u2019t be merged till these checks are accomplished.<\/p>\n<p>To carry out this test, we depend on two important builds: the bottom construct, which displays the present state of the grasp department, and the top construct, which mirrors the grasp department however contains the modifications from the PR, rebased on high of it. Once we now have these two builds prepared, we submit them for processing by <a href=\"https:\/\/www.emergetools.com\/\" target=\"_blank\" rel=\"noopener\">Emerge Tools<\/a>.<\/p>\n<p>Emerge processes these builds and analyzes the variations in app dimension between them. Subsequently, we obtain a complete report with the outcomes of the test.<\/p>\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"950\" height=\"805\" src=\"https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image1-1.png\" alt=\"\" class=\"wp-image-6559\" srcset=\"https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image1-1.png 950w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image1-1-250x212.png 250w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image1-1-700x593.png 700w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image1-1-768x651.png 768w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image1-1-120x102.png 120w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\"\/><figcaption class=\"wp-element-caption\">Figure 1: Pre-merge app-size test circulation.\u00a0<\/figcaption><\/figure>\n<\/div>\n<p>Once the outcomes can be found and reported again from Emerge, the report is conveniently accessible instantly throughout the pull request.<\/p>\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1054\" src=\"https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image3-1.png\" alt=\"\" class=\"wp-image-6560\" srcset=\"https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image3-1.png 1536w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image3-1-250x172.png 250w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image3-1-700x480.png 700w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image3-1-768x527.png 768w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image3-1-120x82.png 120w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\"\/><figcaption class=\"wp-element-caption\">Figure 2: Results of the test in GitHub.<\/figcaption><\/figure>\n<\/div>\n<p>When taking a look at this knowledge, how do we all know if the advantages of the modifications we wish to merge cowl the prices of corresponding app-size enhance or not? For that objective, we\u2019ve established a threshold of 50KB. Everything beneath that threshold may be safely merged with none further motion from the developer. The code modifications that exceed the brink are blocked and an approval is required from a devoted staff that displays and observes these instances. This staff takes a number of elements into consideration when figuring out whether or not a pull request that surpasses this threshold may be merged.<\/p>\n<p><strong>Post-merge course of:\u00a0<\/strong><\/p>\n<p>To improve observability and permit us to maintain an in depth eye on the influence the modifications have made, we\u2019ve arrange a devoted Slack channel the place we are able to obtain details about each pull request that will get merged and exceeds the brink. Having all these important contributions to our app dimension neatly organized in a single place makes monitoring and observing these modifications considerably simpler.<\/p>\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"512\" height=\"378\" src=\"https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image1-2.png\" alt=\"\" class=\"wp-image-6573\" srcset=\"https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image1-2.png 512w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image1-2-250x185.png 250w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image1-2-120x89.png 120w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\"\/><\/figure>\n<\/div>\n<p>This channel isn\u2019t solely for figuring out issues \u2014 it\u2019s additionally a spot for celebrating successes and sharing constructive information. The identical 50KB threshold applies to PRs that efficiently scale back the app\u2019s dimension. If a code change positively impacts app dimension and exceeds the brink ( lower than 50KB), a notification is displayed throughout the identical channel.<\/p>\n<p>By implementing these app-size checks and notifications, we successfully handle our app\u2019s dimension whereas making certain that each the event staff and the stakeholders keep a transparent view of the influence they\u2019ve made by these modifications.<\/p>\n<h3 class=\"wp-block-heading\">Attribution to proprietor groups<\/h3>\n<p>Having security nets is an effective way to forestall huge modifications from sneaking into our codebase. But most pull requests are usually smaller and don\u2019t set off the brink alarm, so there are nonetheless challenges in the case of this sluggish \u201cunder the radar\u201d development. Over time, these seemingly innocent additions to the codebase begin to accumulate. Given the amount of pull requests we merge each day, it\u2019s solely pure that our app\u2019s dimension would step by step broaden. It\u2019s like a snowball impact \u2014 every PR, irrespective of how small, contributes its tiny piece to the puzzle. So whereas the alarms would possibly keep silent, the app dimension continues to develop.<\/p>\n<p>To conquer this drawback, we&#8217;re evaluating the obtain and set up dimension of every compilation unit and useful resource file in our codebase, whereas additionally attributing it to the devoted staff that owns that module.\u00a0<\/p>\n<p>In distinction to PR checks, we solely want one construct for this job \u2014 particularly, the latest snapshot of the grasp department on the time of execution. We add this construct to Emerge for evaluation, and in return, because of <a href=\"https:\/\/docs.emergetools.com\/docs\/compile-unit-attribution\" target=\"_blank\" rel=\"noopener\">Compilation Unit Attribution<\/a>, we obtain an in depth breakdown of compilation models and the way a lot every one contributes to each the obtain and set up sizes. We then enrich this knowledge with useful resource sizes collected utilizing an in-house set of scripts.<\/p>\n<p>After gathering all this knowledge, we course of it and group the information by modules. And since every module has its personal oversight staff, we are able to pinpoint who&#8217;s answerable for what.<\/p>\n<p>The fantastic thing about all of it is that the information aren\u2019t simply uncooked numbers. It\u2019s introduced in a user-friendly interface that enables every staff to visualise and preserve tabs on their app-size contributions over time.<\/p>\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1394\" height=\"663\" src=\"https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image2-1.png\" alt=\"\" class=\"wp-image-6561\" srcset=\"https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image2-1.png 1394w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image2-1-250x119.png 250w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image2-1-700x333.png 700w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image2-1-768x365.png 768w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image2-1-120x57.png 120w\" sizes=\"auto, (max-width: 1394px) 100vw, 1394px\"\/><figcaption class=\"wp-element-caption\">Figure 3: Backstage visualization of the staff\u2019s contribution to the appliance dimension.<\/figcaption><\/figure>\n<\/div>\n<p>To make issues much more insightful, we additionally present statistics that evaluate every staff\u2019s app-size contribution to different groups inside Spotify.<\/p>\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image4.png\" alt=\"\" class=\"wp-image-6562\" style=\"width:768px;height:352px\" width=\"768\" height=\"352\" srcset=\"https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image4.png 680w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image4-250x115.png 250w, https:\/\/storage.googleapis.com\/production-eng\/1\/2023\/11\/image4-120x55.png 120w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\"\/><figcaption class=\"wp-element-caption\">Figure 4: Comparison of the staff\u2019s contribution with the common amongst Spotify groups.<\/figcaption><\/figure>\n<\/div>\n<p>Establishing attribution and holding every staff answerable for its influence permits us to successfully keep a steadiness between rolling out new options and making certain that our app dimension stays inside affordable limits.<\/p>\n<h2 class=\"wp-block-heading\">Working with app dimension in observe at Spotify<\/h2>\n<h3 class=\"wp-block-heading\">Why it\u2019s more durable than it sounds<\/h3>\n<p>It\u2019s simple to say that builders ought to prioritize optimizing their code for dimension, however it\u2019s not all the time that easy.<\/p>\n<p>One cause for that is that optimizing for dimension will not be a free motion. Whenever you refactor a chunk of code in order that it ends in a smaller binary, you&#8217;re very doubtless transferring that drawback to a unique space, which is most frequently both efficiency \u2014 the code is now slower because of this \u2014 or structure \u2014 the code is now more durable to learn\/handle. In different phrases, optimizing for dimension is a trade-off, and the conclusion is drawn that this trade-off will not be value it.<\/p>\n<p>Another cause is that generally lowering the dimensions influence of a selected piece of code merely isn\u2019t possible. We discover that the majority pull requests that set off our alerting programs are comparatively simple to repair, however there are lots of instances the place the supply of the pointless overhead lies not within the code itself, however somewhat a particularity of how the programming language \u2014 and even the working system itself \u2014 works. While these should not unimaginable to deal with, they typically require altering how the app is structured in methods so excessive that we can&#8217;t justify doing so simply to keep away from one regression.<\/p>\n<p>The third and ultimate cause is that generally you merely can&#8217;t run away from it. Any added code will lead to a bigger binary, so if you happen to\u2019re engaged on an enormous and sophisticated function, it could merely be the case that growing the app\u2019s set up dimension can\u2019t be averted. To account for instances like these, we now have created one thing that we name the App Size Policy<strong>.<\/strong><\/p>\n<h3 class=\"wp-block-heading\">App Size Policy &amp; exception Process<\/h3>\n<p>The coverage is, in essence, an enormous doc that explains why we care about app dimension and the programs round it, and it contains basic platform-specific recommendations on easy methods to optimize for code dimension. But most significantly, it defines an exception<strong> <\/strong>course of<strong> <\/strong>that may be adopted when builders imagine their pull requests must be allowed to significantly regress the app\u2019s set up dimension.<\/p>\n<p>In most instances, the method to be granted an exception requires proof that the proposed change may have a constructive influence on the enterprise.\u00a0<\/p>\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n<p>To be certain that our instruments convey worth, we developed a set of metrics and dashboards that we constantly monitor.\u00a0<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<tbody>\n<tr>\n<td class=\"has-text-align-center\" data-align=\"center\" colspan=\"3\"><strong>A take a look at the previous six months<\/strong><\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-center\" data-align=\"center\"><strong>109 PRs<\/strong><br \/>triggered warnings<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\"><strong>53 of the 109 warnings<\/strong><br \/>have been revised and up to date to keep away from important dimension will increase<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\"><strong>10.5MB whole PR dimension decreases<\/strong> <br \/>for PRs with warnings<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>However, the impact of the checks extends past PRs that increase warnings or dashboards that present helpful app-size knowledge. We obtain app-size-related questions within the devoted Slack channel repeatedly, and we now have discovered that Spotify engineers like to make their PRs smaller, leading to a roughly calculated whole PR dimension lower of 20MB.<\/p>\n<p>App-size development is tough to keep away from when including new options or making enhancements. But with the right steering, monitoring, and alerts, we are able to make educated choices about what&#8217;s and what isn\u2019t value including \u2014 and when a brand new performance may end up in a win-win-win state of affairs.<\/p>\n<p><\/p>\n<p>        Tags: <a href=\"https:\/\/engineering.atspotify.com\/tag\/engineering-leadership\/\" rel=\"tag noopener\" target=\"_blank\">engineering management<\/a>, <a href=\"https:\/\/engineering.atspotify.com\/tag\/mobile\/\" rel=\"tag noopener\" target=\"_blank\">Mobile<\/a><br \/> \n            <\/div>\n<p>[ad_2]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] &#13; November 14, 2023&#13; &#13; Published by Viktor Petrovski (Android Engineer), Dmitry Povolotskyi (Senior iOS Engineer), and Bruno Rocha (Senior iOS Engineer) &#13; &#13; Introduction Our each day duties as engineers typically contain implementing new functionalities. Existing customers get to take pleasure in the advantages of those options, new customers are enticed to enroll [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":113563,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[],"class_list":{"0":"post-113561","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-spotify"},"_links":{"self":[{"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/posts\/113561","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/comments?post=113561"}],"version-history":[{"count":0,"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/posts\/113561\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/media\/113563"}],"wp:attachment":[{"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/media?parent=113561"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/categories?post=113561"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/showbizztoday.com\/index.php\/wp-json\/wp\/v2\/tags?post=113561"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}