<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>renderlog</title><description>Blogs on React, performance, and big-tech optimizations. Written from the middle of learning. By Ashish.</description><link>https://renderlog.in/</link><language>en-us</language><item><title>How to Answer Frontend Performance Questions in Interviews</title><link>https://renderlog.in/blog/frontend-performance-interview-approach/</link><guid isPermaLink="true">https://renderlog.in/blog/frontend-performance-interview-approach/</guid><description>How to answer practical frontend performance interviews in React: a seven-area framework—rendering, network, mobile, bundles, assets, memory, and measurement.</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate><category>performance</category><category>interview</category><category>react</category><category>frontend</category><category>javascript</category><author>Ashish</author></item><item><title>Frontend Performance: Series Hub and Quick Reference Guide</title><link>https://renderlog.in/blog/frontend-performance-how-why-hub/</link><guid isPermaLink="true">https://renderlog.in/blog/frontend-performance-how-why-hub/</guid><description>All blogs in the React &amp; JS Performance series in reading order, plus quick reference on layout thrashing, will-change, passive listeners, and INP.</description><pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate><category>performance</category><category>javascript</category><category>frontend</category><category>react</category><category>web</category><author>Ashish</author></item><item><title>Lighthouse Score 100 and Still Crashes: OOM and Long Sessions</title><link>https://renderlog.in/blog/lighthouse-100-still-crashes-memory/</link><guid isPermaLink="true">https://renderlog.in/blog/lighthouse-100-still-crashes-memory/</guid><description>Why a perfect Lighthouse score doesn&apos;t prevent out-of-memory tab crashes in long-running SPAs — and how to build apps that survive 8-hour sessions.</description><pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate><category>performance</category><category>memory</category><category>lighthouse</category><category>mobile</category><category>debugging</category><author>Ashish</author></item><item><title>JavaScript GC: Pauses, Allocation Rate, and Frontend Jank</title><link>https://renderlog.in/blog/javascript-garbage-collection-frontend/</link><guid isPermaLink="true">https://renderlog.in/blog/javascript-garbage-collection-frontend/</guid><description>How V8&apos;s generational garbage collector works, why high allocation rate causes jank, and practical strategies to reduce GC pressure in frontend code.</description><pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate><category>javascript</category><category>performance</category><category>memory</category><category>v8</category><category>frontend</category><author>Ashish</author></item><item><title>React Memory Leaks: Closures, Subscriptions, and Object Graphs</title><link>https://renderlog.in/blog/react-memory-retained-graphs-leaks/</link><guid isPermaLink="true">https://renderlog.in/blog/react-memory-retained-graphs-leaks/</guid><description>How WebSocket subscriptions, stale closures, and unbounded caches create memory leaks in React apps — and how to find and fix them with Chrome DevTools.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><category>react</category><category>performance</category><category>memory</category><category>leaks</category><category>javascript</category><author>Ashish</author></item><item><title>Images, Fonts, and Third-Party Scripts: LCP and CLS Killers</title><link>https://renderlog.in/blog/images-fonts-third-party-performance/</link><guid isPermaLink="true">https://renderlog.in/blog/images-fonts-third-party-performance/</guid><description>How image formats, font loading, and third-party tag managers silently destroy LCP and CLS scores, and the exact fixes for each that actually work.</description><pubDate>Mon, 27 Apr 2026 00:00:00 GMT</pubDate><category>performance</category><category>images</category><category>fonts</category><category>LCP</category><category>frontend</category><author>Ashish</author></item><item><title>Bundle Analysis, Tree Shaking, and Code Splitting</title><link>https://renderlog.in/blog/build-bundles-treeshaking-code-splitting/</link><guid isPermaLink="true">https://renderlog.in/blog/build-bundles-treeshaking-code-splitting/</guid><description>Your 2MB bundle isn&apos;t fate. How bundlers merge modules, why tree shaking fails silently, and how to split code so users only load what they need.</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate><category>performance</category><category>bundling</category><category>javascript</category><category>code-splitting</category><category>frontend</category><author>Ashish</author></item><item><title>Network Optimization in React SPAs: Caching and Prefetching</title><link>https://renderlog.in/blog/network-optimization-spa-react/</link><guid isPermaLink="true">https://renderlog.in/blog/network-optimization-spa-react/</guid><description>Why React SPAs refetch data you already have, and how to fix it: HTTP cache headers, stale-while-revalidate, request deduplication, and prefetch strategies.</description><pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate><category>performance</category><category>network</category><category>react</category><category>caching</category><category>frontend</category><author>Ashish</author></item><item><title>DOM Performance on Mobile: Lab vs Real Device Reality</title><link>https://renderlog.in/blog/mobile-web-dom-performance/</link><guid isPermaLink="true">https://renderlog.in/blog/mobile-web-dom-performance/</guid><description>Budget Android devices run your JS 5-10x slower than your MacBook. Content-visibility, CSS containment, touch scroll, and real debugging on low-end hardware.</description><pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate><category>performance</category><category>mobile</category><category>DOM</category><category>css</category><category>frontend</category><author>Ashish</author></item><item><title>OPFS: The Browser&apos;s Built-in Filesystem for Large Blobs</title><link>https://renderlog.in/blog/origin-private-file-system-opfs/</link><guid isPermaLink="true">https://renderlog.in/blog/origin-private-file-system-opfs/</guid><description>Origin Private File System gives browsers a real sandboxed filesystem. How it compares to IndexedDB, Cache API, and why it&apos;s the right tool for 200MB+ assets.</description><pubDate>Sat, 18 Apr 2026 00:00:00 GMT</pubDate><category>performance</category><category>OPFS</category><category>storage</category><category>web-workers</category><category>javascript</category><author>Ashish</author></item><item><title>Web Workers in React: Moving Heavy Work Off the Main Thread</title><link>https://renderlog.in/blog/web-workers-frontend-react/</link><guid isPermaLink="true">https://renderlog.in/blog/web-workers-frontend-react/</guid><description>CPU-heavy tasks block the UI — Web Workers fix that. Integrate Workers in React with Comlink, custom hooks, and Vite, with before/after profiling results.</description><pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate><category>performance</category><category>web-workers</category><category>javascript</category><category>react</category><category>frontend</category><author>Ashish</author></item><item><title>Large Lists: Pagination, Infinite Scroll, and Virtualization</title><link>https://renderlog.in/blog/large-lists-virtualization-trade-offs/</link><guid isPermaLink="true">https://renderlog.in/blog/large-lists-virtualization-trade-offs/</guid><description>10,000 DOM nodes is slow even if they&apos;re not visible. When to paginate, when to infinite scroll, when to virtualize — and the real cost of each approach.</description><pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate><category>performance</category><category>react</category><category>virtualization</category><category>lists</category><category>frontend</category><author>Ashish</author></item><item><title>React Concurrent Features: Urgent vs Deferred UI Updates</title><link>https://renderlog.in/blog/react-concurrent-features-performance/</link><guid isPermaLink="true">https://renderlog.in/blog/react-concurrent-features-performance/</guid><description>How startTransition and useDeferredValue fix frozen inputs and laggy UIs by separating urgent updates from deferred ones — with real before/after examples.</description><pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate><category>react</category><category>performance</category><category>concurrent</category><category>startTransition</category><category>frontend</category><author>Ashish</author></item><item><title>React.memo, useMemo, useCallback: When They Help vs Hurt</title><link>https://renderlog.in/blog/react-memo-usememo-usecallback/</link><guid isPermaLink="true">https://renderlog.in/blog/react-memo-usememo-usecallback/</guid><description>Most React memoization is premature. Learn when memo, useMemo, and useCallback actually help and when they add memory overhead with zero gain.</description><pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate><category>react</category><category>performance</category><category>useMemo</category><category>useCallback</category><category>frontend</category><author>Ashish</author></item><item><title>React Re-rendering: When and Why Component Trees Update</title><link>https://renderlog.in/blog/react-rerendering-when-trees-update/</link><guid isPermaLink="true">https://renderlog.in/blog/react-rerendering-when-trees-update/</guid><description>Render phase vs commit phase, reconciliation and fibers, what triggers re-renders, referential equality traps, context pitfalls, and React 18 batching.</description><pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate><category>react</category><category>performance</category><category>rendering</category><category>reconciliation</category><category>frontend</category><author>Ashish</author></item><item><title>Why Airbnb Built Lottie: JSON Vector Animations</title><link>https://renderlog.in/blog/lottie-airbnb-json-animation/</link><guid isPermaLink="true">https://renderlog.in/blog/lottie-airbnb-json-animation/</guid><description>How Lottie works: JSON After Effects timelines rendered by cross-platform runtimes. Why Airbnb chose vector JSON over GIF and video for UI animations.</description><pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate><category>lottie</category><category>animation</category><category>frontend</category><category>mobile</category><category>design</category><author>Ashish</author></item><item><title>How Aadhaar Deduplicates Biometrics at Billion Scale</title><link>https://renderlog.in/blog/aadhaar-deduplication-billion-scale/</link><guid isPermaLink="true">https://renderlog.in/blog/aadhaar-deduplication-billion-scale/</guid><description>How Aadhaar&apos;s ABIS deduplicates biometrics at billion scale: fingerprint templates, iris codes, sharded search, multi-engine consensus, and score fusion.</description><pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate><category>aadhaar</category><category>identity</category><category>scale</category><category>engineering</category><category>infrastructure</category><author>Ashish</author></item><item><title>Long Tasks and Main Thread Blocking: Breaking Up the Work</title><link>https://renderlog.in/blog/long-tasks-main-thread-blocking/</link><guid isPermaLink="true">https://renderlog.in/blog/long-tasks-main-thread-blocking/</guid><description>What &gt;50ms Long Tasks are, why they destroy INP, and how to chunk work with scheduler.yield(), postTask(), and Web Workers to keep the UI responsive.</description><pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate><category>performance</category><category>javascript</category><category>long-tasks</category><category>INP</category><category>scheduling</category><author>Ashish</author></item><item><title>Why Rapido Uses a Static PIN (Rapid OTP Trade-offs)</title><link>https://renderlog.in/blog/rapido-rapid-pin-static-otp/</link><guid isPermaLink="true">https://renderlog.in/blog/rapido-rapid-pin-static-otp/</guid><description>Rapido&apos;s fixed 4-digit Rapid PIN vs dynamic OTP: UX, SMS cost, and why physical pickup context matters more than brute-force odds.</description><pubDate>Fri, 03 Apr 2026 00:00:00 GMT</pubDate><category>ux</category><category>product</category><category>security</category><category>engineering</category><category>mobility</category><author>Ashish</author></item><item><title>Core Web Vitals and Lighthouse: What the Scores Mean</title><link>https://renderlog.in/blog/core-web-vitals-lighthouse-explained/</link><guid isPermaLink="true">https://renderlog.in/blog/core-web-vitals-lighthouse-explained/</guid><description>LCP, CLS, INP, and TTFB explained at the technical level. Why lab scores lie, how CrUX data differs, and how to debug each metric in the real world.</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate><category>performance</category><category>core-web-vitals</category><category>lighthouse</category><category>LCP</category><category>INP</category><author>Ashish</author></item><item><title>Meta StyleX: Moving CSS-in-JS From Runtime to Build Time</title><link>https://renderlog.in/blog/meta-stylex-compile-time-styling/</link><guid isPermaLink="true">https://renderlog.in/blog/meta-stylex-compile-time-styling/</guid><description>How Meta StyleX compiles JS-authored styles into atomic static CSS: less runtime injection, smaller bundles, and why that matters for huge apps.</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate><category>stylex</category><category>css</category><category>frontend</category><category>javascript</category><category>meta</category><author>Ashish</author></item><item><title>PiP Loophole: Why DRM Is Not Always Unbreakable</title><link>https://renderlog.in/blog/drm-pip-loophole/</link><guid isPermaLink="true">https://renderlog.in/blog/drm-pip-loophole/</guid><description>Why Picture-in-Picture can bypass DRM black-screen protection in browsers: compositor paths, Widevine L3 vs L1 decode routing, and why 4K stays stubborn.</description><pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate><category>drm</category><category>widevine</category><category>streaming</category><category>web-platform</category><category>chrome</category><author>Ashish</author></item><item><title>The 16.6ms Frame Budget: Why Fast Loads Still Feel Slow</title><link>https://renderlog.in/blog/16ms-frame-budget-60fps/</link><guid isPermaLink="true">https://renderlog.in/blog/16ms-frame-budget-60fps/</guid><description>At 60Hz the browser has ~16.6ms per frame for JS, layout, and paint. Why load scores miss jank and what it means for trading and live data UIs.</description><pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate><category>performance</category><category>javascript</category><category>frontend</category><category>rendering</category><category>react</category><author>Ashish</author></item><item><title>Why JioHotstar Goes Black When You Screen Share (DRM)</title><link>https://renderlog.in/blog/drm-screen-capture-jiohotstar/</link><guid isPermaLink="true">https://renderlog.in/blog/drm-screen-capture-jiohotstar/</guid><description>Why streaming apps go black on screen capture: EME, CDMs, Widevine L1 vs L3, and the secure compositor paths that keep decrypted frames off the capture surface.</description><pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate><category>drm</category><category>streaming</category><category>web-platform</category><category>security</category><category>widevine</category><author>Ashish</author></item><item><title>How Google Maps Sees Traffic Jams Before We Do</title><link>https://renderlog.in/blog/google-maps-traffic-live-prediction/</link><guid isPermaLink="true">https://renderlog.in/blog/google-maps-traffic-live-prediction/</guid><description>Live traffic in Google Maps: how probe data, graph routing, Waze-style reports, and historical speed curves combine to show jams and update ETAs at huge scale.</description><pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate><category>google-maps</category><category>traffic</category><category>gps</category><category>data-engineering</category><category>mapping</category><author>Ashish</author></item><item><title>React State Management: Centralized, Atomic, and Proxy</title><link>https://renderlog.in/blog/react-state-management-patterns/</link><guid isPermaLink="true">https://renderlog.in/blog/react-state-management-patterns/</guid><description>Redux vs Zustand vs Jotai vs Valtio — centralized, atomic, and proxy React state. When each wins on scale, subscriptions, and code simplicity.</description><pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate><category>react</category><category>state-management</category><category>javascript</category><category>frontend</category><category>redux</category><author>Ashish</author></item><item><title>Why React Error Boundaries Are Still Class Components</title><link>https://renderlog.in/blog/why-react-error-boundaries-class-components/</link><guid isPermaLink="true">https://renderlog.in/blog/why-react-error-boundaries-class-components/</guid><description>React error boundaries use class lifecycles, not hooks: what render errors they catch, what async and event errors they skip, and how to structure fallbacks.</description><pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate><category>react</category><category>javascript</category><category>frontend</category><category>error-handling</category><category>react-hooks</category><author>Ashish</author></item><item><title>Why CSS Never Matches Figma: Browser vs Canvas Pipelines</title><link>https://renderlog.in/blog/why-css-never-matches-figma/</link><guid isPermaLink="true">https://renderlog.in/blog/why-css-never-matches-figma/</guid><description>Browsers share one CSS model; Figma uses WASM and GPU shaders. Where design-to-code breaks: radius, strokes, blur, gap, and what to verify before you build.</description><pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate><category>figma</category><category>css</category><category>design-handoff</category><category>frontend</category><category>web-platform</category><author>Ashish</author></item><item><title>Browser Rendering Pipeline: How JS and CSS Become Pixels</title><link>https://renderlog.in/blog/browser-main-thread-rendering-pipeline/</link><guid isPermaLink="true">https://renderlog.in/blog/browser-main-thread-rendering-pipeline/</guid><description>Parse → DOM → CSSOM → Layout → Paint → Composite. What the main thread actually does each frame, what jank physically is, and how to stop causing it.</description><pubDate>Sat, 28 Mar 2026 00:00:00 GMT</pubDate><category>performance</category><category>browser</category><category>rendering</category><category>javascript</category><category>frontend</category><author>Ashish</author></item></channel></rss>