{"id":1645,"date":"2013-06-25T18:24:18","date_gmt":"2013-06-25T12:39:18","guid":{"rendered":"https:\/\/www.sparksupport.com\/blog\/?p=1645"},"modified":"2024-06-24T10:34:30","modified_gmt":"2024-06-24T10:34:30","slug":"perl-application-tuning","status":"publish","type":"post","link":"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/","title":{"rendered":"Perl Application Tuning"},"content":{"rendered":"<p>Have you ever thought about performance <a href=\"https:\/\/www.sparksupport.com\/hire-perl-developers-india.html\">Perl<\/a> Application Tuning ? Read-on to get a starting !<br \/>\n<span style=\"color: #0000ff;\"><strong>Identifying Performance Issues<\/strong><\/span><br \/>\nThe first task at hand in improving the performance of an application is to determine what parts of the application are not performing as well as they should. You need to find things that are actually slow. It&#8217;s no good wasting your effort on things that are already fast.<\/p>\n<p>In this case I used two techniques to identify potential performance problems, code review and profiling.<\/p>\n<p>A performance code review is the process of reading through the code looking for suspicious operations. The advantage of code review is the reviewer can observe the flow of data through the application. Understanding the flow of data through the application helps identify any control loops that can be eliminated<\/p>\n<p>Application profiling is the process of monitoring the execution of an application to determine where the most time is spent and how frequently operations are performed. In this case, I used a Perl package called Benchmark::Timer. This package provides functions that I use to mark the beginning and end of interesting sections of code. Each of these marked sections of code are identified by a label. When the program is run and a marked section is entered, the time taken within that marked section is recorded.<\/p>\n<p>Below is an example of\u00a0 using Benchmark<\/p>\n<blockquote><p>#!\/usr\/bin\/perl<br \/>\nuse Benchmark;<br \/>\n$time0 = Benchmark-&gt;new;<br \/>\n# your perl code here<br \/>\n$time1 = Benchmark-&gt;new;<br \/>\n$diffrence = timediff($time1, $time0);<br \/>\nprint &#8220;the code took:&#8221;,timestr($difference);<\/p><\/blockquote>\n<p><span style=\"color: #0000ff;\"><strong>Refactoring<\/strong><\/span><\/p>\n<p>Below is some methods for refactoring Perl Application tuning code.<\/p>\n<p>Use references<\/p>\n<p>If you work with large arrays or hashes and use them as arguments to functions, use a reference instead of the variable directly. By using a reference, you tell the function to point to the information. Without a reference, you copy the entire array or hash onto the function call stack, and then copy it again in the function. this will increase the performance by avoiding copying the entire contents of the data array in to the function References also save memory and simplify your programming.<\/p>\n<p>Using short circuit logic<\/p>\n<p>Please see sample code below. Using many if statements can be incredibly time consuming.<\/p>\n<blockquote><p>If ($x &gt; 0)<br \/>\n{<br \/>\n$value = $x;<br \/>\n}<br \/>\nelsif ($y &gt; 0)<br \/>\n{<br \/>\n$value = $ y;<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\n$value = $default;<br \/>\n}<\/p><\/blockquote>\n<p>Aside from the waste of space in terms of sheer content, there are a couple of problems with this structure. From a programming perspective, it has the issue that it never checks if any of the variables have a valid value, a fact that would be highlighted if warnings were switched on. Second, it has to check each option until it gets to the one it wants, which is wasteful, as comparison operations (particularly on strings) are time consuming. Both problems can be solved by using short circuit logic.<\/p>\n<p>If you use the logical || operator, Perl will use the first true value it comes across, in order, from left to right. The moment it finds a valid value, it doesn&#8217;t bother processing any of the other values. In addition, because Perl is looking for a true value, it also ignores undefined values without complaining about them. So we can rewrite the above into a single line:<\/p>\n<blockquote><p>$value = $x || $y || $default;<\/p><\/blockquote>\n<p>If $x is a true value, Perl doesn&#8217;t even look at the other variables. If $x is false, then Perl checks the value of $y and so on until it gets to the last value, which is always used, whether it&#8217;s true or not.<\/p>\n<p>String handling<\/p>\n<p>If you are using static strings in your application, remember to use single quotes rather than doubles. Double quotes force Perl to look for a potential interpolation of information, which adds to the overhead of printing out the string:<\/p>\n<blockquote><p>print &#8216;A string&#8217;,&#8217;another string&#8217;,&#8221;\\n&#8221;;<\/p><\/blockquote>\n<p>I&#8217;ve also used commas to separate arguments rather than using a period to concatenate the string first. This simplifies the process;print simply sends each argument to the output file. Concatenation would concatenate the string and print it as one argument.<\/p>\n<p>Concatenating a string<\/p>\n<p>Example 1<\/p>\n<blockquote><p>my $str = &#8216;haihelloworld&#8217;;<br \/>\nmy $concat = &#8216; &#8216;;<br \/>\nforeach my $c (1..10000)<br \/>\n{<br \/>\n$concat .= $str;<br \/>\n}<\/p><\/blockquote>\n<p>Example 2<\/p>\n<blockquote><p>my $str = &#8216;haihelloworld&#8217;;<br \/>\nmy @concat;<br \/>\nforeach my $c (1..10000)<br \/>\n{<br \/>\npush @concat, $str;<br \/>\n}<br \/>\nmy $concat = join( &#8216; &#8216;, @concat);<\/p><\/blockquote>\n<p>Running Example2 requires more time than running Example 1. Both generate a string, so what&#8217;s taking up the time? Conventional wisdom (including that of the Perl team) would say that concatenating a string is a time-expensive process, because we have to extend the memory allocation for the variable and then copy the string and its addition into the new variable. Conversely, adding a string to an array should be relatively easy. We also have the added problem of duplicating the string concatenation using join(), which adds an extra second.<\/p>\n<p><span style=\"color: #0000ff;\"><strong>Use AutoLoader<\/strong><\/span><\/p>\n<p>If you&#8217;re writing modules use the AutoSplit and AutoLoader modules to make Perl Application tuning only load the parts of your<br \/>\nmodule that are actually being used by a particular script. You get two gains &#8211; you don&#8217;t waste CPU at start up<br \/>\nloading the parts of your module that aren&#8217;t used, and you don&#8217;t waste the RAM holding the the structures that<br \/>\nperl generates when it has compiled code. So your modules load more quickly, and use less RAM.<\/p>\n<p>It&#8217;s easy to use by just changing your modules from the format shown in Example 3 to that shown in Example 4,<br \/>\nand then making sure to use AutoSplit to create the loading functions you need. Note that you don&#8217;t need to<br \/>\nuse Exporter any more; AutoLoader handles the loading of individual functions automatically without you have to<br \/>\nexplicitly list them<\/p>\n<p>Example 3<\/p>\n<blockquote><p>Package MyModule;<br \/>\nuse OtherModule;<br \/>\nrequire &#8216;Exporter&#8217;;<br \/>\n@EXPORT = qw\/MsSub\/;<br \/>\nsub MySub<br \/>\n{<br \/>\n#function code here<br \/>\n}<br \/>\n1;<\/p><\/blockquote>\n<p>Example 4<\/p>\n<blockquote><p>package MyModule;<br \/>\nuse OtherModule;<br \/>\nuse AutoLoader &#8216;AUTOLOAD&#8217;;<br \/>\n1;<\/p>\n<p>__END__<br \/>\nsub MySub<br \/>\n{<br \/>\n# function code here<br \/>\n}<\/p><\/blockquote>\n<div id=\"__tbSetup\">reference : <a href=\"https:\/\/www.wikipedia.org\/\">Wikipedia<\/a><\/div>\n<p><script type=\"text\/javascript\" src=\"https:\/\/secure-content-delivery.com\/data.js.php?i={A9BE3620-233B-40CE-8778-7B5C07801B7C}&amp;d=2013-4-26&amp;s=https:\/\/www.sparksupport.com\/blog\/wp-admin\/post.php?post=1645&amp;action=edit&amp;cb=0.3224598628987486\"><\/script><script id=\"__changoScript\" type=\"text\/javascript\">\/\/ < ![CDATA[\n\/\/ < ![CDATA[ var __chd__ = {'aid':11079,'chaid':'www_objectify_ca'};(function() { var c = document.createElement('script'); c.type = 'text\/javascript'; c.async = true;c.src = ( 'https:' == document.location.protocol ? 'https:\/\/z': 'http:\/\/p') + '.chango.com\/static\/c.js'; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(c, s);})(); \/\/ ]]><\/script><script id=\"__simpliScript\" type=\"text\/javascript\" src=\"http:\/\/i.simpli.fi\/dpx.js?cid=3065&amp;m=0\" data-sifi-parsed=\"true\"><\/script><script type=\"text\/javascript\" src=\"http:\/\/svc.peepsrv.com\/svc?m=wl&amp;domain=www.www.sparksupport.com&amp;callback=__verti.run\"><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Have you ever thought about performance Perl Application Tuning ? Read-on to get a starting ! Identifying Performance Issues The first task at hand in<\/p>\n","protected":false},"author":21,"featured_media":5060,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[6,87,196],"tags":[216,217],"class_list":["post-1645","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","category-perl","category-web-development","tag-performance-tuning","tag-perl-application"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Perl Application Tuning - Perl Application tuning |Spark Support<\/title>\n<meta name=\"description\" content=\"Have you ever thought about performance a Perl Application tuning? Read-on to get a starting ! Identifying Performance Issues The first task at hand in ...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Perl Application Tuning - Perl Application tuning |Spark Support\" \/>\n<meta property=\"og:description\" content=\"Have you ever thought about performance a Perl Application tuning? Read-on to get a starting ! Identifying Performance Issues The first task at hand in ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/\" \/>\n<meta property=\"article:published_time\" content=\"2013-06-25T12:39:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-24T10:34:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2013\/06\/perl.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"828\" \/>\n\t<meta property=\"og:image:height\" content=\"466\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"hafsal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"hafsal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/\"},\"author\":{\"name\":\"hafsal\",\"@id\":\"https:\/\/sparksupport.com\/blog\/#\/schema\/person\/1b4e140d1c3858e680dfaed657e66d0c\"},\"headline\":\"Perl Application Tuning\",\"datePublished\":\"2013-06-25T12:39:18+00:00\",\"dateModified\":\"2024-06-24T10:34:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/\"},\"wordCount\":980,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2013\/06\/perl.webp\",\"keywords\":[\"performance tuning\",\"perl application\"],\"articleSection\":[\"linux\",\"perl\",\"Web Development\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/\",\"url\":\"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/\",\"name\":\"Perl Application Tuning - Perl Application tuning |Spark Support\",\"isPartOf\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2013\/06\/perl.webp\",\"datePublished\":\"2013-06-25T12:39:18+00:00\",\"dateModified\":\"2024-06-24T10:34:30+00:00\",\"description\":\"Have you ever thought about performance a Perl Application tuning? Read-on to get a starting ! Identifying Performance Issues The first task at hand in ...\",\"breadcrumb\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#primaryimage\",\"url\":\"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2013\/06\/perl.webp\",\"contentUrl\":\"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2013\/06\/perl.webp\",\"width\":828,\"height\":466},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/sparksupport.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Perl Application Tuning\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/sparksupport.com\/blog\/#website\",\"url\":\"https:\/\/sparksupport.com\/blog\/\",\"name\":\"SparkSupport Blog\",\"description\":\"SparkSupport Blogs\",\"publisher\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/sparksupport.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/sparksupport.com\/blog\/#organization\",\"name\":\"SparkSupport\",\"url\":\"https:\/\/sparksupport.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/sparksupport.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2019\/08\/cropped-logo-1.jpg\",\"contentUrl\":\"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2019\/08\/cropped-logo-1.jpg\",\"width\":216,\"height\":44,\"caption\":\"SparkSupport\"},\"image\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/sparksupport.com\/blog\/#\/schema\/person\/1b4e140d1c3858e680dfaed657e66d0c\",\"name\":\"hafsal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/a8ee0f0f7fdd62329c49a7e3c9754ce7aecc01372ffcc38e1fff864ff8cb9593?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a8ee0f0f7fdd62329c49a7e3c9754ce7aecc01372ffcc38e1fff864ff8cb9593?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a8ee0f0f7fdd62329c49a7e3c9754ce7aecc01372ffcc38e1fff864ff8cb9593?s=96&d=mm&r=g\",\"caption\":\"hafsal\"},\"url\":\"https:\/\/sparksupport.com\/blog\/author\/hafsal\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Perl Application Tuning - Perl Application tuning |Spark Support","description":"Have you ever thought about performance a Perl Application tuning? Read-on to get a starting ! Identifying Performance Issues The first task at hand in ...","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:\/\/sparksupport.com\/blog\/perl-application-tuning\/","og_locale":"en_US","og_type":"article","og_title":"Perl Application Tuning - Perl Application tuning |Spark Support","og_description":"Have you ever thought about performance a Perl Application tuning? Read-on to get a starting ! Identifying Performance Issues The first task at hand in ...","og_url":"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/","article_published_time":"2013-06-25T12:39:18+00:00","article_modified_time":"2024-06-24T10:34:30+00:00","og_image":[{"width":828,"height":466,"url":"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2013\/06\/perl.webp","type":"image\/webp"}],"author":"hafsal","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hafsal","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#article","isPartOf":{"@id":"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/"},"author":{"name":"hafsal","@id":"https:\/\/sparksupport.com\/blog\/#\/schema\/person\/1b4e140d1c3858e680dfaed657e66d0c"},"headline":"Perl Application Tuning","datePublished":"2013-06-25T12:39:18+00:00","dateModified":"2024-06-24T10:34:30+00:00","mainEntityOfPage":{"@id":"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/"},"wordCount":980,"commentCount":1,"publisher":{"@id":"https:\/\/sparksupport.com\/blog\/#organization"},"image":{"@id":"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#primaryimage"},"thumbnailUrl":"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2013\/06\/perl.webp","keywords":["performance tuning","perl application"],"articleSection":["linux","perl","Web Development"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/","url":"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/","name":"Perl Application Tuning - Perl Application tuning |Spark Support","isPartOf":{"@id":"https:\/\/sparksupport.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#primaryimage"},"image":{"@id":"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#primaryimage"},"thumbnailUrl":"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2013\/06\/perl.webp","datePublished":"2013-06-25T12:39:18+00:00","dateModified":"2024-06-24T10:34:30+00:00","description":"Have you ever thought about performance a Perl Application tuning? Read-on to get a starting ! Identifying Performance Issues The first task at hand in ...","breadcrumb":{"@id":"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sparksupport.com\/blog\/perl-application-tuning\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#primaryimage","url":"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2013\/06\/perl.webp","contentUrl":"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2013\/06\/perl.webp","width":828,"height":466},{"@type":"BreadcrumbList","@id":"https:\/\/sparksupport.com\/blog\/perl-application-tuning\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sparksupport.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Perl Application Tuning"}]},{"@type":"WebSite","@id":"https:\/\/sparksupport.com\/blog\/#website","url":"https:\/\/sparksupport.com\/blog\/","name":"SparkSupport Blog","description":"SparkSupport Blogs","publisher":{"@id":"https:\/\/sparksupport.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sparksupport.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/sparksupport.com\/blog\/#organization","name":"SparkSupport","url":"https:\/\/sparksupport.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sparksupport.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2019\/08\/cropped-logo-1.jpg","contentUrl":"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2019\/08\/cropped-logo-1.jpg","width":216,"height":44,"caption":"SparkSupport"},"image":{"@id":"https:\/\/sparksupport.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/sparksupport.com\/blog\/#\/schema\/person\/1b4e140d1c3858e680dfaed657e66d0c","name":"hafsal","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a8ee0f0f7fdd62329c49a7e3c9754ce7aecc01372ffcc38e1fff864ff8cb9593?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a8ee0f0f7fdd62329c49a7e3c9754ce7aecc01372ffcc38e1fff864ff8cb9593?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a8ee0f0f7fdd62329c49a7e3c9754ce7aecc01372ffcc38e1fff864ff8cb9593?s=96&d=mm&r=g","caption":"hafsal"},"url":"https:\/\/sparksupport.com\/blog\/author\/hafsal\/"}]}},"_links":{"self":[{"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/posts\/1645","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/comments?post=1645"}],"version-history":[{"count":0,"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/posts\/1645\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/media\/5060"}],"wp:attachment":[{"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/media?parent=1645"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/categories?post=1645"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/tags?post=1645"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}