{"id":3972,"date":"2022-08-21T00:38:36","date_gmt":"2022-08-20T19:08:36","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/"},"modified":"2022-08-21T00:38:36","modified_gmt":"2022-08-20T19:08:36","slug":"solved-ajax-too-slow-recursion","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/","title":{"rendered":"[Solved] Ajax too slow &#8211; Recursion"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-50705979\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"50705979\" data-parentid=\"50705802\" data-score=\"0\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>You <strong>are<\/strong> recursing and you shouldn&#8217;t be using this form of nested <code>setInterval<\/code>.  Doing this, will cause an explosion of interval instances.  Instead of using <code>setInterval<\/code>, schedule additional requests using <code>setTimeout<\/code>.<\/p>\n<p><a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/WindowOrWorkerGlobalScope\/setInterval\"><code>setInterval<\/code><\/a> will fire and continue firing every interval until you tell it to stop.<\/p>\n<p><a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/WindowOrWorkerGlobalScope\/setTimeout\"><code>setTimeout<\/code><\/a> will fire once.<\/p>\n<hr>\n<p>Let&#8217;s consider the following code which should address some of the issues you are having in this question as well as your other 2 questions.<\/p>\n<p>First off, as we said before, don&#8217;t use <code>setInterval<\/code> unless you actually want it to run forever.  Additionally, don&#8217;t <strong>nest<\/strong> the <code>setInterval<\/code> creations unless you actually mean to.<\/p>\n<p>Instead, let&#8217;s create a recursive function <code>getTimeLeft()<\/code> that will handle firing the request and scheduling the next check for time left after some duration.<\/p>\n<p>This example also mocks the <code>$.ajax()<\/code> function so that you can see the function in action since we don&#8217;t have an actual back end to use.<\/p>\n<\/p>\n<div class=\"snippet\" data-lang=\"js\" data-hide=\"false\" data-console=\"true\" data-babel=\"false\">\n<div class=\"snippet-code\">\n<pre class=\"snippet-code-js lang-js prettyprint-override\"><code>\/\/ Fake server side data to keep track of time lefts\r\nconst timeLefts = {\r\n  foo: 0,\r\n  bar: 0,\r\n  fizz: 0,\r\n  buzz: 0\r\n};\r\nconst timeLeftsUpdateInterval = setInterval(() =&gt; {\r\n  for (const [key, val] of Object.entries(timeLefts)) {\r\n    timeLefts[key] = Math.min(val + Math.random() * 10, 100);\r\n  }\r\n  if (Object.entries(timeLefts).every(([k, v]) =&gt; v &gt;= 100)) {\r\n    clearInterval(timeLeftsUpdateInterval);\r\n  }\r\n}, 1000);\r\n\r\n\/\/ Mock $.ajax function to stub sending AJAX requests\r\nfunction $ajax(kwargs) {\r\n  return {\r\n    done: cb =&gt; {\r\n      setTimeout(() =&gt; {\r\n        cb(timeLefts[kwargs.data.x]);\r\n      }, 500);\r\n    }\r\n  };\r\n}\r\n\r\n\/\/ We will check for an update every second after the last request finishes\r\nconst timeLeftCheckInterval = 1000;\r\n\r\n\/\/ Continuously check to see how much time is left for an element\r\nfunction getTimeLeft(el) {\r\n  \/\/ Make our request data\r\n  const dataString = {\r\n    s: \"&lt;?echo $_SESSION['currentview_'.$stamp]?&gt;\",\r\n    r: \"&lt;?echo $search_usernumber?&gt;\",\r\n    st: \"&lt;?echo $stamp?&gt;\",\r\n    \/\/ My custom property to make this work\r\n    x: el.dataset.item\r\n  };\r\n\r\n  \/\/ Make our request to get the time left\r\n  const req = $ajax({ \/\/ Using our mock $.ajax\r\n    type: \"POST\",\r\n    url: \"get_content_home.php\",\r\n    dataType: \"html\",\r\n    data: dataString\r\n  });\r\n\r\n  \/\/ Once the request has finished\r\n  req.done(data =&gt; {\r\n    \/\/ Set the time left to the element\r\n    el.innerHTML = data;\r\n\r\n    \/\/ Have some condition so that you don't check for time left forever\r\n    \/\/ Eventually there will be no time left right?  Why keep checking?\r\n    if (data.timeleft &lt;= 0) return;\r\n\r\n    \/\/ Schedule another round of checking for time left after some duration\r\n    setTimeout(() =&gt; {\r\n      getTimeLeft(el);\r\n    }, timeLeftCheckInterval);\r\n  });\r\n}\r\n\r\n\/\/ Kick off getting timeleft for all .items\r\nArray.from(document.querySelectorAll(\".item\"))\r\n  .forEach(el =&gt; getTimeLeft(el));<\/code><\/pre>\n<pre class=\"snippet-code-html lang-html prettyprint-override\"><code>&lt;ul&gt;\r\n  &lt;li class=\"item\" data-item=\"foo\"&gt;&lt;\/li&gt;\r\n  &lt;li class=\"item\" data-item=\"bar\"&gt;&lt;\/li&gt;\r\n  &lt;li class=\"item\" data-item=\"fizz\"&gt;&lt;\/li&gt;\r\n  &lt;li class=\"item\" data-item=\"buzz\"&gt;&lt;\/li&gt;\r\n&lt;\/ul&gt;<\/code><\/pre>\n<\/div>\n<\/div>\n<p>This code will address the issue that you are having in 2 Ajax non-blocking because each element will have it&#8217;s own logic of going and fetching time left and updating itself.<\/p>\n<p>This also addresses the issue that you are potentially facing in Timer in Ajax &#8211; Preemption because now the element won&#8217;t check to see how much time is left again until after the previous check is finished.<\/p>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">0<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Ajax too slow &#8211; Recursion <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] You are recursing and you shouldn&#8217;t be using this form of nested setInterval. Doing this, will cause an explosion of interval instances. Instead of using setInterval, schedule additional requests using setTimeout. setInterval will fire and continue firing every interval until you tell it to stop. setTimeout will fire once. Let&#8217;s consider the following code &#8230; <a title=\"[Solved] Ajax too slow &#8211; Recursion\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/\" aria-label=\"More on [Solved] Ajax too slow &#8211; Recursion\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[334,333,325,494],"class_list":["post-3972","post","type-post","status-publish","format-standard","hentry","category-solved","tag-ajax","tag-javascript","tag-performance","tag-recursion"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] Ajax too slow - Recursion - JassWeb<\/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:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Ajax too slow - Recursion - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] You are recursing and you shouldn&#8217;t be using this form of nested setInterval. Doing this, will cause an explosion of interval instances. Instead of using setInterval, schedule additional requests using setTimeout. setInterval will fire and continue firing every interval until you tell it to stop. setTimeout will fire once. Let&#8217;s consider the following code ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-20T19:08:36+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Ajax too slow &#8211; Recursion\",\"datePublished\":\"2022-08-20T19:08:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/\"},\"wordCount\":231,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"ajax\",\"javascript\",\"performance\",\"recursion\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/\",\"name\":\"[Solved] Ajax too slow - Recursion - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-08-20T19:08:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Ajax too slow &#8211; Recursion\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Ajax too slow - Recursion - JassWeb","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:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Ajax too slow - Recursion - JassWeb","og_description":"[ad_1] You are recursing and you shouldn&#8217;t be using this form of nested setInterval. Doing this, will cause an explosion of interval instances. Instead of using setInterval, schedule additional requests using setTimeout. setInterval will fire and continue firing every interval until you tell it to stop. setTimeout will fire once. Let&#8217;s consider the following code ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/","og_site_name":"JassWeb","article_published_time":"2022-08-20T19:08:36+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Ajax too slow &#8211; Recursion","datePublished":"2022-08-20T19:08:36+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/"},"wordCount":231,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["ajax","javascript","performance","recursion"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/","url":"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/","name":"[Solved] Ajax too slow - Recursion - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-08-20T19:08:36+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-ajax-too-slow-recursion\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Ajax too slow &#8211; Recursion"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775193939","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/3972","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=3972"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/3972\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=3972"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=3972"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=3972"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}