[{"data":1,"prerenderedAt":303},["ShallowReactive",2],{"term-t\u002Fthrottle":3,"related-t\u002Fthrottle":291},{"id":4,"title":5,"acronym":6,"body":7,"category":273,"description":274,"difficulty":275,"extension":276,"letter":277,"meta":278,"navigation":208,"path":279,"related":280,"seo":285,"sitemap":286,"stem":289,"subcategory":6,"__hash__":290},"terms\u002Fterms\u002Ft\u002Fthrottle.md","Throttle",null,{"type":8,"value":9,"toc":267},"minimark",[10,15,19,23,26,30,256,260,263],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 — The Vibe Check",[16,17,18],"p",{},"Limiting how often a function can fire. Unlike debounce (which waits until you STOP), throttle fires at a steady rate no matter how fast you trigger it. Perfect for scroll events — instead of firing 60 times per second, throttle it to once every 100ms. Your browser will thank you.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"Throttling limits a function's execution to at most once per specified time interval, regardless of how many times it's invoked. Unlike debouncing, it guarantees regular execution during continuous activity. It's ideal for scroll handlers, resize events, and mousemove tracking where periodic updates are needed.",[11,27,29],{"id":28},"show-me-the-code","Show Me The Code",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","function throttle(fn, limit) {\n  let throttled = false\n  return (...args) => {\n    if (!throttled) {\n      fn(...args)\n      throttled = true\n      setTimeout(() => throttled = false, limit)\n    }\n  }\n}\n\n\u002F\u002F Fires at most once per 100ms during scroll\nwindow.addEventListener('scroll', throttle(onScroll, 100))\n","javascript","",[38,39,40,73,90,110,132,148,159,185,191,197,203,210,217],"code",{"__ignoreMap":36},[41,42,45,49,53,57,61,64,67,70],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"spNyl","function",[41,50,52],{"class":51},"s2Zo4"," throttle",[41,54,56],{"class":55},"sMK4o","(",[41,58,60],{"class":59},"sHdIc","fn",[41,62,63],{"class":55},",",[41,65,66],{"class":59}," limit",[41,68,69],{"class":55},")",[41,71,72],{"class":55}," {\n",[41,74,76,79,83,86],{"class":43,"line":75},2,[41,77,78],{"class":47},"  let",[41,80,82],{"class":81},"sTEyZ"," throttled",[41,84,85],{"class":55}," =",[41,87,89],{"class":88},"sfNiH"," false\n",[41,91,93,97,100,103,105,108],{"class":43,"line":92},3,[41,94,96],{"class":95},"s7zQu","  return",[41,98,99],{"class":55}," (...",[41,101,102],{"class":59},"args",[41,104,69],{"class":55},[41,106,107],{"class":47}," =>",[41,109,72],{"class":55},[41,111,113,116,120,123,126,129],{"class":43,"line":112},4,[41,114,115],{"class":95},"    if",[41,117,119],{"class":118},"swJcz"," (",[41,121,122],{"class":55},"!",[41,124,125],{"class":81},"throttled",[41,127,128],{"class":118},") ",[41,130,131],{"class":55},"{\n",[41,133,135,138,140,143,145],{"class":43,"line":134},5,[41,136,137],{"class":51},"      fn",[41,139,56],{"class":118},[41,141,142],{"class":55},"...",[41,144,102],{"class":81},[41,146,147],{"class":118},")\n",[41,149,151,154,156],{"class":43,"line":150},6,[41,152,153],{"class":81},"      throttled",[41,155,85],{"class":55},[41,157,158],{"class":88}," true\n",[41,160,162,165,167,170,172,174,176,179,181,183],{"class":43,"line":161},7,[41,163,164],{"class":51},"      setTimeout",[41,166,56],{"class":118},[41,168,169],{"class":55},"()",[41,171,107],{"class":47},[41,173,82],{"class":81},[41,175,85],{"class":55},[41,177,178],{"class":88}," false",[41,180,63],{"class":55},[41,182,66],{"class":81},[41,184,147],{"class":118},[41,186,188],{"class":43,"line":187},8,[41,189,190],{"class":55},"    }\n",[41,192,194],{"class":43,"line":193},9,[41,195,196],{"class":55},"  }\n",[41,198,200],{"class":43,"line":199},10,[41,201,202],{"class":55},"}\n",[41,204,206],{"class":43,"line":205},11,[41,207,209],{"emptyLinePlaceholder":208},true,"\n",[41,211,213],{"class":43,"line":212},12,[41,214,216],{"class":215},"sHwdD","\u002F\u002F Fires at most once per 100ms during scroll\n",[41,218,220,223,226,229,231,234,238,240,242,244,247,249,253],{"class":43,"line":219},13,[41,221,222],{"class":81},"window",[41,224,225],{"class":55},".",[41,227,228],{"class":51},"addEventListener",[41,230,56],{"class":81},[41,232,233],{"class":55},"'",[41,235,237],{"class":236},"sfazB","scroll",[41,239,233],{"class":55},[41,241,63],{"class":55},[41,243,52],{"class":51},[41,245,246],{"class":81},"(onScroll",[41,248,63],{"class":55},[41,250,252],{"class":251},"sbssI"," 100",[41,254,255],{"class":81},"))\n",[11,257,259],{"id":258},"when-youll-hear-this","When You'll Hear This",[16,261,262],{},"\"Throttle the scroll handler to 100ms — it's janking.\" \u002F \"Debounce for search, throttle for scroll — don't mix them up.\"",[264,265,266],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":36,"searchDepth":75,"depth":75,"links":268},[269,270,271,272],{"id":13,"depth":75,"text":14},{"id":21,"depth":75,"text":22},{"id":28,"depth":75,"text":29},{"id":258,"depth":75,"text":259},"frontend","Limiting how often a function can fire. Unlike debounce (which waits until you STOP), throttle fires at a steady rate no matter how fast you trigger it.","intermediate","md","t",{},"\u002Fterms\u002Ft\u002Fthrottle",[281,282,283,284],"Debounce","Event Loop","Performance","Rate Limiting",{"title":5,"description":274},{"changefreq":287,"priority":288},"weekly",0.7,"terms\u002Ft\u002Fthrottle","CCXHho00_Pf_Zv4YhUmWyHrS9RaLfmRvsT3DWaeg4JM",[292,295,299],{"title":281,"path":293,"acronym":6,"category":273,"difficulty":275,"description":294},"\u002Fterms\u002Fd\u002Fdebounce","Making a function wait until you STOP doing something before it fires. Like a search bar that waits until you stop typing before actually searching.",{"title":282,"path":296,"acronym":6,"category":273,"difficulty":297,"description":298},"\u002Fterms\u002Fe\u002Fevent-loop","advanced","JavaScript can only do one thing at a time (single-threaded), but the Event Loop is the trick that makes it seem like it can multitask.",{"title":284,"path":300,"acronym":6,"category":301,"difficulty":275,"description":302},"\u002Fterms\u002Fr\u002Frate-limiting","backend","Rate limiting is like a bouncer who says 'you can come in 100 times per hour, then you wait.",1776518318876]