React Academy · पाठ

INP घटाना: इवेंट हैंडलर का अनुकूलन

भारी हैंडलर को डिबाउंस करें, scheduler.yield() का उपयोग करें और मुख्य थ्रेड को अवरुद्ध करने वाले लंबे टास्क से बचें।

पाठ 4, कुल 4 में से13 चरण

INP घटाना: इवेंट हैंडलर का अनुकूलन, CoddyKit पर React Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह React Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। React Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

INP क्या है

Interaction to Next Paint (INP) उपयोगकर्ता इंटरैक्शन (क्लिक, टैप, कुंजी दबाना) से browser द्वारा प्रतिक्रिया को पेंट करने तक की विलंबता मापता है। INP > 200ms धीमा महसूस होता है।

React इवेंट धीमे क्यों हो सकते हैं

जो React इवेंट हैंडलर समकालिक रूप से बहुत अधिक काम करते हैं, वे मुख्य थ्रेड को रोक देते हैं। JS कार्य पूरा होने तक browser प्रतिक्रिया को पेंट नहीं कर सकता — इससे INP बढ़ जाता है।

टाइप किए गए इनपुट को डिबाउंस करना

कीस्ट्रोक से शुरू होने वाले महँगे ऑपरेशन (सर्च API कॉल, भारी गणनाएँ) को डिबाउंस करें। हर कीस्ट्रोक पर React state अपडेट करना ठीक है; महँगे काम को डिबाउंस किया जाना चाहिए।

import { useDeferredValue, useState } from 'react';

function SearchPage() {
  const [query, setQuery] = useState('');
  const deferredQuery = useDeferredValue(query); // defers re-render of slow parts

  return (
    <>
      <input value={query} onChange={e => setQuery(e.target.value)} />
      <SearchResults query={deferredQuery} /> {/* re-renders with lower priority */}
    </>
  );
}

गैर-तात्कालिक अपडेट के लिए useTransition

धीमे state अपडेट को गैर-तात्कालिक के रूप में चिह्नित करने के लिए उन्हें startTransition में रखें। React उन्हें स्थगित कर देता है, जिससे इनपुट प्रतिक्रियाशील बना रहता है।

const [isPending, startTransition] = useTransition();

function handleFilter(value) {
  setInputValue(value); // urgent — update input immediately
  startTransition(() => {
    setFilteredList(expensiveFilter(value)); // non-urgent — can be interrupted
  });
}

भारी काम को मुख्य थ्रेड से हटाना

CPU-गहन कार्यों (बड़े डेटासेट को पार्स करना, इमेज प्रोसेसिंग) के लिए Web Workers का उपयोग करें। worker के गणना करने के दौरान मुख्य थ्रेड प्रतिक्रियाशील बना रहता है।

const worker = new Worker(new URL('./heavy-worker.js', import.meta.url));

function processData(data) {
  return new Promise(resolve => {
    worker.postMessage(data);
    worker.onmessage = e => resolve(e.data);
  });
}

// In component:
const handleClick = async () => {
  const result = await processData(largeDataset); // doesn't block main thread
  setResult(result);
};

लंबे कार्यों से बचना

लंबे कार्य (>50ms) मुख्य थ्रेड को रोकते हैं और INP बढ़ाते हैं। उन्हें setTimeout, scheduler.yield() या requestIdleCallback की सहायता से छोटे भागों में बाँटें।

async function processInChunks(items) {
  const CHUNK_SIZE = 100;
  for (let i = 0; i < items.length; i += CHUNK_SIZE) {
    const chunk = items.slice(i, i + CHUNK_SIZE);
    processChunk(chunk);
    await new Promise(r => setTimeout(r, 0)); // yield to browser between chunks
  }
}

scheduler.yield() (आधुनिक API)

scheduler.yield() नियंत्रण browser के इवेंट लूप को वापस देता है, जिससे आपका कोड फिर से शुरू होने से पहले लंबित उपयोगकर्ता इंटरैक्शन संसाधित किए जा सकते हैं।

async function longTask() {
  for (const item of largeList) {
    processItem(item);
    if (/* every N items */) {
      await scheduler.yield(); // let browser handle pending clicks/inputs
    }
  }
}

हैंडलर में समकालिक लेआउट से बचें

लेआउट प्रॉपर्टी (offsetWidth, getBoundingClientRect()) पढ़ने पर समकालिक लेआउट पुनर्गणना होती है। लेआउट थ्रैशिंग से बचने के लिए पढ़ने के कार्यों को लिखने के कार्यों से पहले समूहित करें।

// Bad — forces layout recalculation on each iteration:
items.forEach(item => {
  const height = item.offsetHeight; // READ — forces layout
  item.style.height = height * 2 + 'px'; // WRITE — dirties layout
});

// Good — batch reads, then writes:
const heights = items.map(item => item.offsetHeight); // all reads
heights.forEach((h, i) => items[i].style.height = h * 2 + 'px'); // all writes

async INP के लिए React 19 Actions

React 19 Actions UI को रोके बिना async म्यूटेशन संभालते हैं — लंबित स्थिति अलग से अपडेट होती है, इसलिए पेज इंटरैक्टिव बना रहता है।

function LikeButton({ postId }) {
  const [optimistic, setOptimistic] = useOptimistic(false);

  async function handleLike() {
    setOptimistic(true);
    await likePost(postId); // async — doesn't block
  }

  return <button onClick={handleLike}>{optimistic ? 'Liked' : 'Like'}</button>;
}

इवेंट डेलीगेशन की समस्याएँ

React सिंथेटिक इवेंट डेलीगेशन का उपयोग करता है (रूट पर एक listener जोड़ता है)। useEffect में सैकड़ों अलग-अलग DOM listener जोड़ने से बचें — इसके बजाय JSX तत्वों पर React के सिंथेटिक इवेंट का उपयोग करें।

DevTools में INP मापना

किसी इंटरैक्शन को रिकॉर्ड करने और लंबे कार्यों का निरीक्षण करने के लिए Chrome DevTools के Performance पैनल का उपयोग करें। टाइमलाइन में 'Interaction' प्रविष्टियाँ खोजें और उन्हें विस्तृत करके रोकने वाले script मूल्यांकन ढूँढ़ें।

त्वरित जाँच

कौन-सा React hook state अपडेट को गैर-तात्कालिक चिह्नित करता है, ताकि उसे उपयोगकर्ता इंटरैक्शन द्वारा बीच में रोका जा सके?

पुनरावलोकन

महँगे काम को डिबाउंस करके, गैर-तात्कालिक अपडेट के लिए startTransition का उपयोग करके, CPU कार्य को Web Workers पर भेजकर और लंबे कार्यों को scheduler.yield() से बाँटकर INP कम करें। लेआउट थ्रैशिंग से बचने के लिए DOM पढ़ने के कार्यों को लिखने के कार्यों से पहले समूहित करें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ React सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
88
पाठ
324

अक्सर पूछे जाने वाले प्रश्न

क्या “INP घटाना: इवेंट हैंडलर का अनुकूलन” पाठ निःशुल्क है?

हाँ—“INP घटाना: इवेंट हैंडलर का अनुकूलन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और React Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। React Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“INP घटाना: इवेंट हैंडलर का अनुकूलन” में मैं क्या सीखूँगा?

भारी हैंडलर को डिबाउंस करें, scheduler.yield() का उपयोग करें और मुख्य थ्रेड को अवरुद्ध करने वाले लंबे टास्क से बचें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ React Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या React Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर React Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“INP घटाना: इवेंट हैंडलर का अनुकूलन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस React Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर React Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. React ऐप में Core Web Vitals मापना
  2. बंडल विश्लेषण और कोड विभाजन रणनीति
  3. React में इमेज और फ़ॉन्ट का अनुकूलन
  4. INP घटाना: इवेंट हैंडलर का अनुकूलन
← React Academy पर वापस जाएँ