Screenshots waxaa laga yaabaa in la soo saarka problem simulated of the article, oo ay ku saabsan codka ugu horeysay, oo ka mid ah shahaado dhismaha. Screenshots waxaa laga yaabaa in la soo saarka problem simulated of the article, oo ay ku saabsan codka ugu horeysay, oo ka mid ah shahaado dhismaha. ️ Tababarka Qalabka Qalabka: Page Freeze on Input Qalabka dhismaha dhismaha The Breakthrough: Pause Script Execution waxaa laga yaabaa The Root Cause: A Loop That Never End Shuruudaha Xirfadiga (Try It Yourself) Sidaa waxa uu ka soo xiriir Ma rabtaa in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay. Haku Qalabka Buugga waxaa laga yaabaa a Haku Project. React + TypeScript + Redux + RxJS Shuruudaha ugu horeysay ee ku saabsan shuruudaha ugu horeysay ee shuruudaha ugu horeysay ee Sida loo isticmaali karaa, waxaa loo isticmaali karaa a (Coolka loo isticmaali karaa) (Haddii loo yaqaan 'Calculate the Nala soo xiriir text. quantity Redux selector reselect Total cost Waxaad ka mid ah u aragto ah in la Sidee Buy Sidaa waxaa laga yaabaa in la Sidee waxay ka caawiyaan wax ka mid ah: Sidee waxay ku yaalaa in la mid ah in ka mid ka mid ah . Sell 1 Qalabka: Page Freeze on Input Ka dib markii loo soo saarka in la soo saarka Qalabka: The UI froze completely The browser tab became unresponsive The in Chrome Performance Monitor. (Sometimes, the JS heap size also keeps increasing) CPU usage 100% Waxaa laga yaabaa in ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah. . Qalabka Full Chrome ka dibna soo dejisan "Page Unresponsive" dialoog iyo waxaan ku yaalaa tab. Qalabka dhismaha dhismaha Qalabka dhismaha ugu caawin ah waxay ka caawinayaa: Attempt Result console.log Never printed anything debugger; Too slow or never triggered React DevTools Profiler Froze with the app Chrome Performance Profiler Couldn’t finish recording Removing components Still froze, even with just the input console.log Haddaba ha ahaatee debugger; Sida loo isticmaali karaa in ay u isticmaali karaa in ay u isticmaali karaa in ay isticmaali karaa. Shirkadda DevTools Soo dejisan in la app Soo dejisan Chrome Performance Ma waxaad ka hortago recording. Qalabka Qalabka Qalabka waxaa laga yaabaa in ka mid ah mid ka mid ah mid ka mid ah Qalabka waxaa laga yaabaa a Waayo, waxaan ka mid ah. loop or recursive render The Breakthrough: Pause Script Execution waxaa laga yaabaa Waxa uu ka mid ah ka mid ah wax soo saarka ah oo ka mid ah wax soo saarka. . JavaScript is still running Sida loo helo Waayo, waxaa loo isticmaali karaa wax soo saarka ah. Chrome DevTools → Sources tab Pause Script Execution (⏸️) Ma rabtaa in aad Cudarada in aad Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudar Ma rabtaa in aad Cudarada in aad Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudar https://developer.chrome.com/docs/devtools/javascript/breakpoint Haku: Open Chrome DevTools first! You won’t be able to open them during the freeze. Reproduce the freeze (enter quantity). When the tab hangs, open . DevTools → Sources tab Click the icon (top-right). ⏸️ Pause Chrome freezes JS execution . at that exact line Scroll down on the right panel & check the panel to trace which functions are currently executing. Call Stack Scroll through the parent calls to reveal how the function chain started. You can even click on the parent calls to see their invoked line! The Root Cause: A Loop That Never End Shuruudaha ugu soo saarka ah oo ku yaalaa 8 + function, ka dibna soo saarka Shuruudaha iyo soo saarka A Sida loo isticmaalo a . onChange utility function Redux Reselect selector Sidaa waxaa lagu soo xiriir: let a = 0; const size = props.size; // expected number, got string while (a < size) { // do something } Xafiiska Waa in la soo saarka in ay ku yaalaa in ay ku yaalaa in ay ku saabsan: a Sidaa . props.size string "5" Sida loo yaqaan JS coercion quirks, soo saarka buugga ha ahaado in la soo saarka in la soo saarka, oo ay ka caawiyaan buugga ah oo soo saarka oo dhan. Qalabka waa mid ka mid ah si ay u isticmaali karaa qiimaha ka mid ah oo loo isticmaali karaa: const size = Number(props.size); Sidee, soo xiriir la soo xiriir . Shuruudaha Xirfadiga (Try It Yourself) Ma rabtaa in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay. Sida loo isticmaali karaa codka ugu horeysay ee Ma rabtaa wax soo saarka ugu horeeya, waayo, this Nala soo xiriir browser. Haku Create React App, Haku Haku import { useState } from "react"; export default function App() { const [quantity, setQuantity] = useState(""); const handleChange = (e) => { const value = e.target.value; setQuantity(value); const end = Date.now() + 145000; let a = 0; // ❌ Intentional infinite loop while (Date.now() < end) { // Busy-wait a++; } console.log("Done!"); // never reached }; return ( <div style={{ padding: 20 }}> <h2>🧊 Simulate a Page Freeze</h2> <input type="text" placeholder="Enter quantity" value={quantity} onChange={handleChange} /> <p>Type any number and watch Chrome suffer.</p> </div> ); } Qalabka Reproduction Waayo, waxaa loo yaabaa in codesandbox oo ka mid ah codesandbox. Nala soo xiriir Input. Qalabka Qalabka Qalabka Qalabka Waayo, aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan yahay. Waayo, waxaa loo yaabaa in ay ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah. Sidaa waxa uu ka soo xiriir Waayo, waxaa laga yaabaa in ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah. Shuruudaha Infinite waxaa laga yaabaa in selectors, reducers, ama faylka utility ka mid ah UI. Waayo, sidoo kale waxaa laga yaabaa in la soo bandhigiisa in la soo bandhigiisa. Markaad ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah. Ma rabtaa in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay. Sida loo isticmaali karaa loo isticmaali karaa in ay isticmaali karaa. Qalabka JS waxaa loo yaabaa in ay ku yaalaa. memory leaks Shuruudaha shuruudaha shuruudaha shuruudaha shuruudaha shuruudaha shuruudaha shuruudaha shuruudaha shuruudaha shuruudaha shuruudaha shuruudaha shuruudaha shuruudaha shuruudaha shuruudaha shuruudaha shuruudaha Sida loo isticmaali karaa in aad u isticmaali karaa in aad u isticmaali karaa in aad isticmaali karaa.