<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Azizbek Usmonov</title>
    <description>The latest articles on DEV Community by Azizbek Usmonov (@azizbek_usmonov_112e1ddc8).</description>
    <link>https://dev.to/azizbek_usmonov_112e1ddc8</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3580339%2F1d2dbe05-8fe6-4de3-847d-ab8584049eaa.png</url>
      <title>DEV Community: Azizbek Usmonov</title>
      <link>https://dev.to/azizbek_usmonov_112e1ddc8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/azizbek_usmonov_112e1ddc8"/>
    <language>en</language>
    <item>
      <title>Frontendda debouncing va throttling. Qachon qaysi biridan foydalanish kerak?</title>
      <dc:creator>Azizbek Usmonov</dc:creator>
      <pubDate>Thu, 23 Oct 2025 14:45:53 +0000</pubDate>
      <link>https://dev.to/azizbek_usmonov_112e1ddc8/frontendda-debouncing-va-throttling-qachon-qaysi-biridan-foydalanish-kerak-1c5n</link>
      <guid>https://dev.to/azizbek_usmonov_112e1ddc8/frontendda-debouncing-va-throttling-qachon-qaysi-biridan-foydalanish-kerak-1c5n</guid>
      <description>&lt;p&gt;Agar Frontend developer bo’lsangiz, qisqa vaqt ichida bir necha marotaba ishlaydigan kodlarga to’g’ri kelgan bo’lsangiz kerak. Ba’zi holatlar bo’ladi ularni biz optimization qillishimiz kerak bo’ladi. Masalan, foydalanuvchi &lt;code&gt;input&lt;/code&gt;ga nimanidir kiritayotganida backenddan &lt;a href="https://www.google.com/search?q=input+with+suggestions+react&amp;amp;sca_esv=2a6646da058cd39e&amp;amp;udm=2&amp;amp;biw=2560&amp;amp;bih=1322&amp;amp;sxsrf=AE3TifO9ssa9JeOhAVDCWcMcPV33fpYkUg%3A1761143861226&amp;amp;ei=Nez4aL_HDbDUwPAPuZeo2Ac&amp;amp;oq=input+with+suggestions&amp;amp;gs_lp=Egtnd3Mtd2l6LWltZyIWaW5wdXQgd2l0aCBzdWdnZXN0aW9ucyoCCAIyBRAAGIAEMgUQABiABDIEEAAYHjIEEAAYHjIEEAAYHjIGEAAYChgeMgYQABgFGB4yBhAAGAUYHjIGEAAYBRgeMgYQABgFGB5I-UFQuwlYvilwA3gAkAEAmAHFAaAByRGqAQQwLjE1uAEDyAEA-AEBmAIHoAKPCMICBxAjGCcYyQLCAgYQABgHGB7CAggQABgHGAoYHsICCBAAGAcYCBgemAMAiAYBkgcDMC43oAfCXLIHAzAuN7gHjwjCBwUwLjUuMsgHEw&amp;amp;sclient=gws-wiz-img" rel="noopener noreferrer"&gt;&lt;code&gt;suggestions&lt;/code&gt;&lt;/a&gt; larni olib kelishimiz kerak bo’ladi yoki sahifa o’lchami o’zgarganida layoutni moslashtiradigan resize eventi bo’lishi mumkin. Bunaqa holatda kodingizni juda tez-tez ishga tushurishni xohlamaysiz, chunki bu ortiqcha API requestlar’ga, performance tushib ketishiga yoki yuqori GPU sarfiga olib keladi.&lt;/p&gt;

&lt;p&gt;Bu muammoni hal qilish uchun siz &lt;strong&gt;debouncing&lt;/strong&gt; va &lt;strong&gt;throttling&lt;/strong&gt; deb ataluvchi ikkita texnikadan foydalanishingiz mumkin.&lt;br&gt;
Ushbu maqolada biz &lt;strong&gt;debouncing&lt;/strong&gt; va &lt;strong&gt;throtling&lt;/strong&gt; nima ekanini, ularning farqini va Javascript’da qanday amalga oshirish mumkinligini ko’rib chiqamiz.&lt;/p&gt;
&lt;h2&gt;
  
  
  Debouncing nima?
&lt;/h2&gt;

&lt;p&gt;Foydalanuvchi ma’lum bir amalni bajarishdan to’xtatganidan keyin, ma’lum bir vaqt o’tgach funksiyani call qiladigan texnika. Ya’ni, ma’lum bir event ketma ket bajarilayotgan bo’lsa funksiya doimiy call qilinmaydi, faqatgina ma’lum vaqtdan so’ng bajariladi. Masalan, foydalanuvchi qidirayotgan ma’lumotlarni bekenddan olib keluvchi funksiyani debounce qilish mumkin. Shunda API request foydalanuvchi yozishni to’xtatganidan keyin ma’lum vaqt o’tgach bajariladi. Bu ortiqcha requestlar sonini kamaytidagi va serverni keraksiz yuklamalardan himoya qiladi.&lt;/p&gt;
&lt;h3&gt;
  
  
  JavaScript’da debouncing function:
&lt;/h3&gt;

&lt;p&gt;Biz &lt;code&gt;setTimeout&lt;/code&gt; yordamida taymer qo’yishimiz va &lt;code&gt;clearTimeout&lt;/code&gt; yordamida avvalgi taymerni cancel qilishimiz mumkin. Shunda foydalanuvchi yana amal bajarsa, taymer yangidan boshlanadi va funksiya oxirgi urinishdan keyin ma’lum vaqt o’tgach ishga tushadi.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;searchHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;getSearchResults&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// API request&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;debounce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;func&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;timer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;clearTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;timer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;timer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;func&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="nx"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;debouncedSearchHandler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;debounce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;searchHandler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;searchBar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;debouncedSearchHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Throttling nima?
&lt;/h2&gt;

&lt;p&gt;Bu funksiya ma’lum bir vaqt oralig’ida faqat bir marotaba bajarilishini ta’minlaydigan texnika. Masalan, sahifa o’lchami o’zgarganida layoutni update qiluvchi funksiyani throttle qilib, uni har 100 ms da bir marotaba ishlatish mumkin. Bu kodni ortiqcha execute bo’lishini oldini oladi va layoutni smooth qiladi. &lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript’da throttling function yozamiz:
&lt;/h3&gt;

&lt;p&gt;Biz &lt;code&gt;isRunning&lt;/code&gt; nomli flag declare qilib funksiya hozir bajarilayotganini aniqlashimiz mumkin. Funksiya run bo’lishni boshlaganida flag &lt;code&gt;true&lt;/code&gt; bo’ladi va &lt;code&gt;setTimeout&lt;/code&gt; orqali belgilangan vaqt o’tganidan keyin &lt;code&gt;false&lt;/code&gt; ga qaytariladi.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;updateLayout&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;throttle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;func&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;isRunning&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isRunning&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;isRunning&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nx"&gt;func&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;isRunning&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="nx"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;throttledUpdateLayout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;throttle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updateLayout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;resize&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;throttledUpdateLayout&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Xulosa qilib aytganda bu ikkita texnika performance optimization va UX uchun katta foyda beradi. Shunchaki har birini kerakli joyda qo’llashni bilishimiz kerak. &lt;/p&gt;




&lt;p&gt;Telegram kanalimga obuna bo’ling: &lt;a href="https://t.me/usmanov_dev" rel="noopener noreferrer"&gt;@usmanov_dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Blogim orqali o’qish: &lt;a href="https://www.azizziy.uz/blog/event-throttling-va-debouncing" rel="noopener noreferrer"&gt;https://www.azizziy.uz/blog/event-throttling-va-debouncing&lt;/a&gt;&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>debouncing</category>
      <category>throttling</category>
    </item>
  </channel>
</rss>
