<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Engrain by ByteRush</title><link>https://engrain.getbyterush.com</link><description>New and updated concepts.</description><item><title>Render vs commit: what React actually does when state changes</title><link>https://engrain.getbyterush.com/rct/rct-01/rct-01-01-render-vs-commit-react-elements</link><guid>https://engrain.getbyterush.com/rct/rct-01/rct-01-01-render-vs-commit-react-elements</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>React elements are plain objects; rendering calls your components to describe the UI, and committing changes the DOM. Learn what triggers a re-render, and why a render is not a DOM update.</description></item><item><title>State as a snapshot, and batching: why setCount(count + 1) three times adds one</title><link>https://engrain.getbyterush.com/rct/rct-01/rct-01-02-state-as-a-snapshot-and-batching</link><guid>https://engrain.getbyterush.com/rct/rct-01/rct-01-02-state-as-a-snapshot-and-batching</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Each render sees a fixed snapshot of state. Learn updater functions, how React queues and batches updates (everywhere since React 18), when to use flushSync, and how to predict the result of several updates.</description></item><item><title>Conditional types and infer: types that make decisions</title><link>https://engrain.getbyterush.com/ts/ts-05/ts-05-02-conditional-types-and-infer</link><guid>https://engrain.getbyterush.com/ts/ts-05/ts-05-02-conditional-types-and-infer</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Write T extends U ? X : Y, understand why conditional types spread over unions and how to stop it, and pull types out of other types with infer.</description></item><item><title>Mapped types and key remapping: transforming every property at once</title><link>https://engrain.getbyterush.com/ts/ts-05/ts-05-03-mapped-types-and-key-remapping</link><guid>https://engrain.getbyterush.com/ts/ts-05/ts-05-03-mapped-types-and-key-remapping</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Build new object types from old ones with { [K in keyof T]: ... }, add or remove readonly and ?, rename keys with as, and drop keys by mapping them to never.</description></item><item><title>Implementing utility types: Pick, Omit, Exclude, Awaited and friends from scratch</title><link>https://engrain.getbyterush.com/ts/ts-06/ts-06-02-implementing-utility-types</link><guid>https://engrain.getbyterush.com/ts/ts-06/ts-06-02-implementing-utility-types</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Write the built-in utility types yourself, test types with Expect&lt;Equal&lt;...&gt;&gt;, and learn why Omit breaks unions and how DistributiveOmit fixes it.</description></item><item><title>Typing hooks, reducers and context in React</title><link>https://engrain.getbyterush.com/ts/ts-08/ts-08-03-typing-hooks-reducers-and-context</link><guid>https://engrain.getbyterush.com/ts/ts-08/ts-08-03-typing-hooks-reducers-and-context</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Type useState with unions, useReducer with discriminated actions, useRef for DOM nodes and mutable values, context with a non-null guard hook, and custom hooks that return tuples.</description></item><item><title>Runtime validation at boundaries: types do not check your API</title><link>https://engrain.getbyterush.com/ts/ts-08/ts-08-04-runtime-validation-at-boundaries</link><guid>https://engrain.getbyterush.com/ts/ts-08/ts-08-04-runtime-validation-at-boundaries</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>TypeScript types disappear at runtime, so JSON from fetch can be anything. Parse it with a schema (Zod), infer types from the schema, validate env vars and forms, and know end-to-end type tools.</description></item><item><title>Browser processes and navigation: what happens before the first byte of HTML</title><link>https://engrain.getbyterush.com/web/web-01/web-01-01-browser-processes-and-navigation</link><guid>https://engrain.getbyterush.com/web/web-01/web-01-01-browser-processes-and-navigation</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>How a modern browser splits work into processes, why each site gets its own renderer, what happens step by step when you open a URL, and why one crashed tab does not take the browser down.</description></item><item><title>Parsing HTML and CSS: the DOM, the CSSOM and what blocks them</title><link>https://engrain.getbyterush.com/web/web-01/web-01-02-parsing-html-and-css-dom-and-cssom</link><guid>https://engrain.getbyterush.com/web/web-01/web-01-02-parsing-html-and-css-dom-and-cssom</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>How the browser turns bytes into the DOM and CSSOM, why CSS blocks rendering and scripts block parsing, what the preload scanner does, and exactly when async, defer and module scripts run.</description></item><item><title>Style, layout, paint and composite: how a frame is made</title><link>https://engrain.getbyterush.com/web/web-01/web-01-03-style-layout-paint-and-composite</link><guid>https://engrain.getbyterush.com/web/web-01/web-01-03-style-layout-paint-and-composite</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>The stages after the DOM and CSSOM: style calculation, layout, paint, raster and compositing on the GPU, and which CSS property changes rerun which stages, so animations stay smooth.</description></item><item><title>Forced synchronous layout and layout thrashing</title><link>https://engrain.getbyterush.com/web/web-01/web-01-04-forced-synchronous-layout-and-layout-thrashing</link><guid>https://engrain.getbyterush.com/web/web-01/web-01-04-forced-synchronous-layout-and-layout-thrashing</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Why reading offsetHeight right after changing a style forces the browser to lay out at once, how a loop of reads and writes thrashes, and how to fix it by batching reads before writes.</description></item><item><title>The critical rendering path: getting to the first paint sooner</title><link>https://engrain.getbyterush.com/web/web-01/web-01-05-the-critical-rendering-path</link><guid>https://engrain.getbyterush.com/web/web-01/web-01-05-the-critical-rendering-path</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>What the browser needs before it can paint, how critical CSS and resource hints (preload, preconnect, dns-prefetch, modulepreload, fetchpriority) shorten the wait, font-display, and 103 Early Hints.</description></item><item><title>Efficient DOM updates: adding 10,000 rows without freezing the page</title><link>https://engrain.getbyterush.com/web/web-02/web-02-02-efficient-dom-updates</link><guid>https://engrain.getbyterush.com/web/web-02/web-02-02-efficient-dom-updates</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Batch DOM changes, build off-screen with DocumentFragment and template cloning, swap content with replaceChildren, know innerHTML's cost and risk, and skip off-screen work with virtualization and content-visibility.</description></item><item><title>IntersectionObserver: knowing what is on screen without scroll listeners</title><link>https://engrain.getbyterush.com/web/web-04/web-04-01-intersectionobserver</link><guid>https://engrain.getbyterush.com/web/web-04/web-04-01-intersectionobserver</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Use IntersectionObserver for lazy loading, infinite scroll sentinels and visibility analytics. How root, rootMargin and threshold work, and why its callbacks keep scrolling smooth.</description></item><item><title>Cookies in depth: every Set-Cookie attribute and when to use it</title><link>https://engrain.getbyterush.com/web/web-05/web-05-01-cookies-in-depth</link><guid>https://engrain.getbyterush.com/web/web-05/web-05-01-cookies-in-depth</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>What Domain, Path, Expires, Max-Age, Secure, HttpOnly, SameSite and Partitioned really do, the __Host- prefix, size limits, and where third-party cookies stand in each browser today.</description></item><item><title>Web Workers, SharedArrayBuffer and cross-origin isolation</title><link>https://engrain.getbyterush.com/web/web-06/web-06-01-web-workers</link><guid>https://engrain.getbyterush.com/web/web-06/web-06-01-web-workers</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Move heavy work off the main thread with Web Workers: postMessage and structured cloning, transferable objects, module workers, what workers cannot touch, RPC wrappers, and why SharedArrayBuffer needs COOP and COEP.</description></item><item><title>The service worker lifecycle: install, wait, activate, and update safely</title><link>https://engrain.getbyterush.com/web/web-06/web-06-03-service-worker-lifecycle</link><guid>https://engrain.getbyterush.com/web/web-06/web-06-03-service-worker-lifecycle</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>How a service worker registers, installs, waits and activates, what scope means, the trade-offs of skipWaiting and clients.claim, and how to show a "new version available" prompt so users are never stuck.</description></item><item><title>Caching strategies and offline: cache-first, network-first and stale-while-revalidate</title><link>https://engrain.getbyterush.com/web/web-06/web-06-04-caching-strategies-and-offline</link><guid>https://engrain.getbyterush.com/web/web-06/web-06-04-caching-strategies-and-offline</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Choose the right service worker caching strategy for each kind of request, precache with versioned URLs, serve an offline page, use navigation preload, and avoid bugs where users get stale content forever.</description></item><item><title>Forms in depth: validation, autocomplete and mobile keyboards</title><link>https://engrain.getbyterush.com/web/web-07/web-07-01-forms-in-depth</link><guid>https://engrain.getbyterush.com/web/web-07/web-07-01-forms-in-depth</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Use the Constraint Validation API for custom messages, autocomplete tokens so browsers fill forms, inputmode and enterkeyhint for the right mobile keyboard, FormData, and :user-invalid styling.</description></item><item><title>dialog, popover and details: modals and menus without a library</title><link>https://engrain.getbyterush.com/web/web-07/web-07-02-dialog-popover-and-details</link><guid>https://engrain.getbyterush.com/web/web-07/web-07-02-dialog-popover-and-details</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>What &lt;dialog&gt; with showModal() gives you for free, how the Popover API and the top layer work, light dismiss, &lt;details&gt; accordions, and the state of CSS anchor positioning.</description></item><item><title>The cascade, specificity and inheritance: why that color won</title><link>https://engrain.getbyterush.com/web/web-08/web-08-01-the-cascade-specificity-and-inheritance</link><guid>https://engrain.getbyterush.com/web/web-08/web-08-01-the-cascade-specificity-and-inheritance</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>The real order the cascade uses (origin and importance, layers, specificity, scope, order), how to calculate specificity, why !important flips layer order, and inherit, initial, unset, revert and revert-layer.</description></item><item><title>Custom properties and modern selectors: var(), @property, :is, :where, :has and nesting</title><link>https://engrain.getbyterush.com/web/web-08/web-08-03-custom-properties-and-modern-selectors</link><guid>https://engrain.getbyterush.com/web/web-08/web-08-03-custom-properties-and-modern-selectors</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>How CSS custom properties inherit and resolve at use time, fallbacks, typed properties with @property, the difference between :is() and :where(), what :has() makes possible, and native CSS nesting.</description></item><item><title>Formatting contexts and margin collapsing: the rules behind odd gaps</title><link>https://engrain.getbyterush.com/web/web-09/web-09-01-formatting-contexts-and-margin-collapsing</link><guid>https://engrain.getbyterush.com/web/web-09/web-09-01-formatting-contexts-and-margin-collapsing</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Block and inline formatting contexts, what creates a block formatting context (flow-root, overflow, flex and grid), exactly how vertical margins collapse, and how floats are contained.</description></item><item><title>Positioning and containing blocks: why your fixed header moved</title><link>https://engrain.getbyterush.com/web/web-09/web-09-02-positioning-and-containing-blocks</link><guid>https://engrain.getbyterush.com/web/web-09/web-09-02-positioning-and-containing-blocks</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Which box each position value is placed against, why transform, filter and contain on an ancestor trap position: fixed, what sticky needs to work, and the inset shorthand.</description></item><item><title>Stacking contexts and z-index: why z-index: 9999 still loses</title><link>https://engrain.getbyterush.com/web/web-09/web-09-03-stacking-contexts-and-z-index</link><guid>https://engrain.getbyterush.com/web/web-09/web-09-03-stacking-contexts-and-z-index</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>What creates a stacking context, how painting order works inside one, why a huge z-index cannot escape its parent's context, and how the top layer goes above everything.</description></item><item><title>Overflow, scrolling and containment: carousels and panels without JavaScript</title><link>https://engrain.getbyterush.com/web/web-09/web-09-05-overflow-scrolling-and-containment</link><guid>https://engrain.getbyterush.com/web/web-09/web-09-05-overflow-scrolling-and-containment</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Overflow values and scroll containers, CSS scroll snap for carousels, overscroll-behavior to stop scroll chaining, scrollbar-gutter to stop layout jumps, and CSS containment for performance.</description></item><item><title>Responsive images: srcset, sizes, picture and the right loading hints</title><link>https://engrain.getbyterush.com/web/web-10/web-10-01-responsive-images-and-media</link><guid>https://engrain.getbyterush.com/web/web-10/web-10-01-responsive-images-and-media</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>How srcset with width descriptors and sizes lets the browser pick the right file, when to use density descriptors, picture for art direction and AVIF/WebP, lazy loading, decoding, fetchpriority, and why width and height matter.</description></item><item><title>Container queries and fluid design: components that fit wherever they go</title><link>https://engrain.getbyterush.com/web/web-10/web-10-02-container-queries-and-fluid-design</link><guid>https://engrain.getbyterush.com/web/web-10/web-10-02-container-queries-and-fluid-design</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Style components by the size of their container with container-type and @container, use container units, build fluid type with clamp(), and fix mobile 100vh bugs with svh, lvh and dvh.</description></item><item><title>HTTP semantics in depth: methods, status codes and negotiation</title><link>https://engrain.getbyterush.com/web/web-12/web-12-01-http-semantics-in-depth</link><guid>https://engrain.getbyterush.com/web/web-12/web-12-01-http-semantics-in-depth</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Which HTTP methods are safe and idempotent and why it matters, the status codes interviewers ask about (301/302/307/308, 401 vs 403, 409, 412, 422, 429), content negotiation, and compression with gzip, Brotli and zstd.</description></item><item><title>TCP, TLS and connection setup: the round trips before your first byte</title><link>https://engrain.getbyterush.com/web/web-12/web-12-02-tcp-tls-and-connection-setup</link><guid>https://engrain.getbyterush.com/web/web-12/web-12-02-tcp-tls-and-connection-setup</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Count the round trips before a request: the TCP handshake, the TLS 1.3 handshake and 0-RTT resumption with its replay risk, certificate chains, HSTS, and head-of-line blocking.</description></item><item><title>HTTP/1.1, HTTP/2 and HTTP/3: what changed and which old tricks still help</title><link>https://engrain.getbyterush.com/web/web-12/web-12-03-http-1-1-http-2-and-http-3</link><guid>https://engrain.getbyterush.com/web/web-12/web-12-03-http-1-1-http-2-and-http-3</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Why HTTP/1.1 needed domain sharding and sprites, how HTTP/2 multiplexes streams on one connection with HPACK, why server push was removed, and how HTTP/3 over QUIC fixes head-of-line blocking.</description></item><item><title>HTTP caching headers: Cache-Control, ETags and deploying without stale files</title><link>https://engrain.getbyterush.com/web/web-13/web-13-01-http-caching-headers</link><guid>https://engrain.getbyterush.com/web/web-13/web-13-01-http-caching-headers</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Read and write Cache-Control (max-age, s-maxage, no-cache vs no-store, private, immutable, stale-while-revalidate), validate with ETag and 304, understand heuristic freshness and Vary, and ship new JavaScript safely.</description></item><item><title>Cache layers: memory, disk, service worker, CDN and the back/forward cache</title><link>https://engrain.getbyterush.com/web/web-13/web-13-02-cache-layers-memory-disk-service-worker-cdn</link><guid>https://engrain.getbyterush.com/web/web-13/web-13-02-cache-layers-memory-disk-service-worker-cdn</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Every cache a request can hit, in order: memory and disk caches, the service worker, the CDN edge and its cache key. Plus versioned URLs vs purging, and the back/forward cache and what blocks it.</description></item><item><title>The same-origin policy: origins, sites and what one page may do to another</title><link>https://engrain.getbyterush.com/web/web-14/web-14-01-same-origin-policy-sites-and-origins</link><guid>https://engrain.getbyterush.com/web/web-14/web-14-01-same-origin-policy-sites-and-origins</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>What an origin is (scheme, host, port) and how it differs from a site, what the same-origin policy blocks and what it still allows, and how to use postMessage safely with origin checks.</description></item><item><title>CORS in depth: preflights, credentials and fixing the errors</title><link>https://engrain.getbyterush.com/web/web-14/web-14-02-cors-in-depth</link><guid>https://engrain.getbyterush.com/web/web-14/web-14-02-cors-in-depth</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>How CORS lets a server allow cross-origin reads, when the browser sends an OPTIONS preflight, every Access-Control header, why * cannot be used with cookies, why curl ignores CORS, and how to fix common errors.</description></item><item><title>REST API design for frontend engineers</title><link>https://engrain.getbyterush.com/web/web-15/web-15-01-rest-api-design-for-frontend-engineers</link><guid>https://engrain.getbyterush.com/web/web-15/web-15-01-rest-api-design-for-frontend-engineers</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Design APIs your UI can use well: resources and URLs, methods and status codes, problem-details errors (RFC 9457), offset vs cursor pagination, filtering, idempotency keys, versioning and the backend-for-frontend pattern.</description></item><item><title>Polling, long polling and Server-Sent Events</title><link>https://engrain.getbyterush.com/web/web-16/web-16-01-polling-long-polling-and-server-sent-events</link><guid>https://engrain.getbyterush.com/web/web-16/web-16-01-polling-long-polling-and-server-sent-events</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>Get live updates from a server: the cost of short polling, how long polling works, Server-Sent Events with EventSource (the stream format, auto-reconnect, Last-Event-ID), SSE over HTTP/2, and SSE for streaming LLM tokens.</description></item><item><title>WebSockets: two-way real time that survives a bad network</title><link>https://engrain.getbyterush.com/web/web-16/web-16-02-websockets</link><guid>https://engrain.getbyterush.com/web/web-16/web-16-02-websockets</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>How the WebSocket upgrade works, full-duplex messaging, heartbeats, reconnecting with backoff and resyncing missed messages, message ids and ordering, authentication on connect, scaling with sticky sessions and pub/sub, and WebTransport.</description></item><item><title>Request, Response, headers and bodies: fetch beyond the basics</title><link>https://engrain.getbyterush.com/web/web-17/web-17-01-request-response-headers-and-bodies</link><guid>https://engrain.getbyterush.com/web/web-17/web-17-01-request-response-headers-and-bodies</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>The Request and Response objects behind fetch, why a body can be read only once (bodyUsed, clone), the credentials, mode, cache, redirect, keepalive and priority options, and a fetch wrapper with proper errors.</description></item><item><title>Client-side routing: the History API, the Navigation API, and SPA vs MPA</title><link>https://engrain.getbyterush.com/web/web-18/web-18-01-history-api-and-hash-routing</link><guid>https://engrain.getbyterush.com/web/web-18/web-18-01-history-api-and-hash-routing</guid><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><description>How client-side routing works with pushState and popstate, hash routing, why deep links 404 without a server fallback, scroll and focus after navigation, the Navigation API, SPA vs MPA vs islands, prefetching and speculation rules.</description></item><item><title>Tool calling: how a model asks your code to act</title><link>https://engrain.getbyterush.com/agt/agt-06/agt-06-01-tool-calling</link><guid>https://engrain.getbyterush.com/agt/agt-06/agt-06-01-tool-calling</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>The model never runs your functions. It asks; your code runs the tool and sends the result back. Learn the tool-use loop, schemas, parallel calls and errors as results.</description></item><item><title>Callbacks and timers: telling JavaScript to do something later</title><link>https://engrain.getbyterush.com/fnd/fnd-10/fnd-10-03-callbacks-and-timers</link><guid>https://engrain.getbyterush.com/fnd/fnd-10/fnd-10-03-callbacks-and-timers</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Pass a function to run later, schedule it with setTimeout or setInterval, cancel it, and see why setTimeout(fn, 0) still runs after your other code.</description></item><item><title>Call stack and run-to-completion: why a long function freezes the page</title><link>https://engrain.getbyterush.com/js/js-01/js-01-01-call-stack-and-run-to-completion</link><guid>https://engrain.getbyterush.com/js/js-01/js-01-01-call-stack-and-run-to-completion</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>JavaScript runs one function at a time on a call stack, and finishes it before anything else runs. That is why a long loop freezes the page.</description></item><item><title>Tasks and the task queue: how the event loop picks what runs next</title><link>https://engrain.getbyterush.com/js/js-01/js-01-02-tasks-macrotasks-and-the-task-queue</link><guid>https://engrain.getbyterush.com/js/js-01/js-01-02-tasks-macrotasks-and-the-task-queue</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Timers, clicks and messages become tasks. The event loop runs one task at a time, which is why setTimeout(fn, 0) never means 0 ms.</description></item><item><title>Microtasks: why promise callbacks run before timers</title><link>https://engrain.getbyterush.com/js/js-01/js-01-03-microtasks-promises-queuemicrotask-mutationobserver</link><guid>https://engrain.getbyterush.com/js/js-01/js-01-03-microtasks-promises-queuemicrotask-mutationobserver</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Promise callbacks are microtasks. They all run right after the current task, before any timer — which explains most event-loop interview puzzles.</description></item><item><title>Rendering steps: where requestAnimationFrame fits in the event loop</title><link>https://engrain.getbyterush.com/js/js-01/js-01-04-rendering-steps-requestanimationframe-and-frames</link><guid>https://engrain.getbyterush.com/js/js-01/js-01-04-rendering-steps-requestanimationframe-and-frames</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>The browser paints between tasks, at the screen's refresh rate. requestAnimationFrame runs your code right before that paint — the right place for animation.</description></item><item><title>async/await in the event loop: what really happens at each await</title><link>https://engrain.getbyterush.com/js/js-01/js-01-05-async-await-in-the-event-loop</link><guid>https://engrain.getbyterush.com/js/js-01/js-01-05-async-await-in-the-event-loop</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>await pauses only the async function and resumes it in a microtask. See why code after await runs later, and why forEach does not wait.</description></item><item><title>The Node.js event loop: phases, setImmediate and process.nextTick</title><link>https://engrain.getbyterush.com/js/js-01/js-01-06-the-node-js-event-loop-and-its-phases</link><guid>https://engrain.getbyterush.com/js/js-01/js-01-06-the-node-js-event-loop-and-its-phases</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Node.js runs its event loop in phases. Learn the phase order, why setImmediate beats setTimeout inside I/O callbacks, and where nextTick fits.</description></item><item><title>Yielding to the main thread: keep pages responsive during heavy work</title><link>https://engrain.getbyterush.com/js/js-01/js-01-07-scheduling-and-yielding-to-the-main-thread</link><guid>https://engrain.getbyterush.com/js/js-01/js-01-07-scheduling-and-yielding-to-the-main-thread</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Long tasks make clicks wait and hurt INP. Split work into chunks, yield with scheduler.yield or a timer, and know what React's scheduler does.</description></item><item><title>Lexical scope and the scope chain: where JavaScript looks for a variable</title><link>https://engrain.getbyterush.com/js/js-02/js-02-01-lexical-scope-and-the-scope-chain</link><guid>https://engrain.getbyterush.com/js/js-02/js-02-01-lexical-scope-and-the-scope-chain</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>A variable is found by where the code is written, not where it is called. Learn global, module, function and block scope, the scope chain and shadowing.</description></item><item><title>Hoisting and the temporal dead zone: why some names exist before their line</title><link>https://engrain.getbyterush.com/js/js-02/js-02-02-hoisting-and-the-temporal-dead-zone</link><guid>https://engrain.getbyterush.com/js/js-02/js-02-02-hoisting-and-the-temporal-dead-zone</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>JavaScript sets up every name in a scope before running it. Learn what var, function, let and const look like before their line, and what the TDZ is.</description></item><item><title>Closures: functions that remember where they were made</title><link>https://engrain.getbyterush.com/js/js-02/js-02-03-closures-functions-that-remember</link><guid>https://engrain.getbyterush.com/js/js-02/js-02-03-closures-functions-that-remember</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>A closure is a function plus the variables around it. Use closures for private state, understand the var-in-a-loop trap, and write once().</description></item><item><title>Closures and memory: how a small function can keep big data alive</title><link>https://engrain.getbyterush.com/js/js-02/js-02-04-closures-and-memory</link><guid>https://engrain.getbyterush.com/js/js-02/js-02-04-closures-and-memory</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>A closure keeps its variables alive as long as it lives. See how forgotten listeners leak memory, a V8 detail that surprises people, and how to find leaks.</description></item><item><title>Strict mode and the global object: turning silent mistakes into errors</title><link>https://engrain.getbyterush.com/js/js-02/js-02-05-strict-mode-and-the-global-object</link><guid>https://engrain.getbyterush.com/js/js-02/js-02-05-strict-mode-and-the-global-object</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Strict mode makes typos and failed writes throw instead of failing silently. Modules and classes are strict by default. Learn what changes, and globalThis.</description></item><item><title>The four rules of this: how JavaScript decides what this is</title><link>https://engrain.getbyterush.com/js/js-03/js-03-01-the-four-rules-of-this</link><guid>https://engrain.getbyterush.com/js/js-03/js-03-01-the-four-rules-of-this</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>this is set by how a function is called, not where it is written. Learn the four binding rules, their order, and why passing a method as a callback loses this.</description></item><item><title>Arrow functions and lexical this: when to use them, and when not to</title><link>https://engrain.getbyterush.com/js/js-03/js-03-02-arrow-functions-and-lexical-this</link><guid>https://engrain.getbyterush.com/js/js-03/js-03-02-arrow-functions-and-lexical-this</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Arrow functions take this from the code around them. That fixes callbacks inside methods, breaks object methods, and costs memory as class fields.</description></item><item><title>call, apply and bind in depth — and how to write bind yourself</title><link>https://engrain.getbyterush.com/js/js-03/js-03-03-call-apply-and-bind-in-depth</link><guid>https://engrain.getbyterush.com/js/js-03/js-03-03-call-apply-and-bind-in-depth</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>call and apply run a function now with a chosen this; bind returns a new function. Learn partial application, why bound functions stay bound, and new on them.</description></item><item><title>Prototypes and the prototype chain: where an object finds what it does not have</title><link>https://engrain.getbyterush.com/js/js-04/js-04-01-objects-prototypes-and-the-prototype-chain</link><guid>https://engrain.getbyterush.com/js/js-04/js-04-01-objects-prototypes-and-the-prototype-chain</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Every object links to a prototype. Property lookup walks that chain until it finds the name or reaches null. Learn own vs inherited and __proto__ vs prototype.</description></item><item><title>What new really does: constructors, instanceof and Object.create</title><link>https://engrain.getbyterush.com/js/js-04/js-04-02-constructor-functions-and-new</link><guid>https://engrain.getbyterush.com/js/js-04/js-04-02-constructor-functions-and-new</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>new creates an object, links it to the constructor's prototype, runs the constructor, and returns the object. Build new and instanceof yourself.</description></item><item><title>Classes: private fields, static members and inheritance, built on prototypes</title><link>https://engrain.getbyterush.com/js/js-04/js-04-03-classes</link><guid>https://engrain.getbyterush.com/js/js-04/js-04-03-classes</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>class is a cleaner way to write constructors and prototypes, plus real private fields. Learn methods, #private, static, getters, extends, super and brand checks.</description></item><item><title>Primitive types and typeof: the seven primitives and the null surprise</title><link>https://engrain.getbyterush.com/js/js-05/js-05-01-primitive-types-and-typeof</link><guid>https://engrain.getbyterush.com/js/js-05/js-05-01-primitive-types-and-typeof</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>JavaScript has seven primitive types plus objects. Learn what typeof returns for each, why typeof null is 'object', and how primitives get methods.</description></item><item><title>Type coercion and ToPrimitive: how JavaScript converts values for you</title><link>https://engrain.getbyterush.com/js/js-05/js-05-02-type-coercion-and-toprimitive</link><guid>https://engrain.getbyterush.com/js/js-05/js-05-02-type-coercion-and-toprimitive</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>When types do not match, JavaScript converts them to numbers, strings or booleans. Learn the rules, why + is special, and how objects become primitives.</description></item><item><title>Equality in JavaScript: ==, ===, Object.is and SameValueZero</title><link>https://engrain.getbyterush.com/js/js-05/js-05-03-equality-object-is-samevaluezero</link><guid>https://engrain.getbyterush.com/js/js-05/js-05-03-equality-object-is-samevaluezero</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>JavaScript has four kinds of equality. Learn the == steps, why NaN !== NaN, how +0 and -0 differ, and which one includes, Map and Set use.</description></item><item><title>Numbers in JavaScript: why 0.1 + 0.2 is not 0.3, and how to handle money</title><link>https://engrain.getbyterush.com/js/js-05/js-05-04-numbers-floating-point-bigint-and-precision</link><guid>https://engrain.getbyterush.com/js/js-05/js-05-04-numbers-floating-point-bigint-and-precision</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>JavaScript numbers are 64-bit floating point. Learn why decimals drift, the safe integer limit, parseInt traps, BigInt, and how to store money in paise or cents.</description></item><item><title>Map, Set, WeakMap and WeakRef: choosing the right collection</title><link>https://engrain.getbyterush.com/js/js-06/js-06-02-map-set-weakmap-weakset-weakref</link><guid>https://engrain.getbyterush.com/js/js-06/js-06-02-map-set-weakmap-weakset-weakref</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Map takes any key and keeps order; Set keeps unique values and now has union and intersection; WeakMap keys objects without keeping them alive.</description></item><item><title>Shallow vs deep copy: why changing a copy changed the original</title><link>https://engrain.getbyterush.com/js/js-06/js-06-03-shallow-vs-deep-copy</link><guid>https://engrain.getbyterush.com/js/js-06/js-06-03-shallow-vs-deep-copy</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Spread and Object.assign copy only the top level. Learn reference semantics, what structuredClone can and cannot copy, and why a JSON round-trip loses data.</description></item><item><title>Higher-order functions and composition: building pipelines from small functions</title><link>https://engrain.getbyterush.com/js/js-07/js-07-01-higher-order-functions-and-composition</link><guid>https://engrain.getbyterush.com/js/js-07/js-07-01-higher-order-functions-and-composition</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Functions that take or return functions power map, filter, reduce, middleware and React hooks. Learn to compose small steps with pipe and compose.</description></item><item><title>Currying and partial application: fixing some arguments now, the rest later</title><link>https://engrain.getbyterush.com/js/js-07/js-07-02-currying-and-partial-application</link><guid>https://engrain.getbyterush.com/js/js-07/js-07-02-currying-and-partial-application</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Currying turns f(a, b, c) into f(a)(b)(c); partial application fixes some arguments up front. Learn both, fn.length and its limits, and write curry.</description></item><item><title>Memoization: caching results without caching your bugs</title><link>https://engrain.getbyterush.com/js/js-07/js-07-03-memoization</link><guid>https://engrain.getbyterush.com/js/js-07/js-07-03-memoization</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Memoization stores a function's results by input. Learn cache keys, eviction, memoizing async functions safely, and when caching makes things worse.</description></item><item><title>Recursion and the stack: when a function calls itself</title><link>https://engrain.getbyterush.com/js/js-07/js-07-04-recursion-and-the-stack</link><guid>https://engrain.getbyterush.com/js/js-07/js-07-04-recursion-and-the-stack</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Recursion solves nested problems in a few lines. Learn base cases, tree walks, stack depth limits, tail calls, and how to rewrite recursion with your own stack.</description></item><item><title>Destructuring, spread, rest and defaults: modern syntax you read every day</title><link>https://engrain.getbyterush.com/js/js-08/js-08-01-destructuring-spread-rest-and-defaults</link><guid>https://engrain.getbyterush.com/js/js-08/js-08-01-destructuring-spread-rest-and-defaults</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Unpack objects and arrays, collect extra arguments, copy with spread, and know when default values run. With the traps interviewers ask about.</description></item><item><title>Optional chaining and ??: safe access without hiding real values</title><link>https://engrain.getbyterush.com/js/js-08/js-08-02-optional-chaining-nullish-coalescing-logical-assignment</link><guid>https://engrain.getbyterush.com/js/js-08/js-08-02-optional-chaining-nullish-coalescing-logical-assignment</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Read nested data that may be missing with ?., pick fallbacks with ?? instead of ||, and use ??=, ||= and &amp;&amp;=. With the 0 and empty-string traps.</description></item><item><title>ES modules: import, export and live bindings</title><link>https://engrain.getbyterush.com/js/js-10/js-10-01-es-modules</link><guid>https://engrain.getbyterush.com/js/js-10/js-10-01-es-modules</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>How import and export really work: named and default exports, live bindings, why modules are strict and deferred, and why each module runs only once.</description></item><item><title>CommonJS vs ES modules: require, import and making them work together</title><link>https://engrain.getbyterush.com/js/js-10/js-10-02-commonjs-vs-esm-and-interop</link><guid>https://engrain.getbyterush.com/js/js-10/js-10-02-commonjs-vs-esm-and-interop</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Why require and import behave differently, how Node.js decides which one a file uses, require(esm) in current Node.js, and how dual packages use the exports field.</description></item><item><title>Dynamic import, top-level await and code splitting</title><link>https://engrain.getbyterush.com/js/js-10/js-10-03-dynamic-import-top-level-await-and-code-splitting</link><guid>https://engrain.getbyterush.com/js/js-10/js-10-03-dynamic-import-top-level-await-and-code-splitting</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Load code only when it is needed with import(). How bundlers split routes, why top-level await delays every importer, and what import maps and import attributes do.</description></item><item><title>Promise internals: states, reactions and resolution</title><link>https://engrain.getbyterush.com/js/js-11/js-11-01-promise-internals-states-reactions-and-resolution</link><guid>https://engrain.getbyterush.com/js/js-11/js-11-01-promise-internals-states-reactions-and-resolution</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>What a promise really is: three states, settling once, reaction jobs, then() returning a new promise, errors that skip ahead, and why resolving with a promise costs extra ticks.</description></item><item><title>Error handling in async code: where errors go, and where they get lost</title><link>https://engrain.getbyterush.com/js/js-11/js-11-02-error-handling-in-async-code</link><guid>https://engrain.getbyterush.com/js/js-11/js-11-02-error-handling-in-async-code</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Place catch and finally correctly, avoid forgotten awaits, know why return await matters inside try, and what browsers and Node.js do with unhandled rejections.</description></item><item><title>Promise combinators: all, allSettled, race and any</title><link>https://engrain.getbyterush.com/js/js-11/js-11-03-promise-combinators</link><guid>https://engrain.getbyterush.com/js/js-11/js-11-03-promise-combinators</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Pick the right way to wait for many promises. How Promise.all fails fast, what allSettled, race and any return, their empty-array cases, and how to write Promise.all.</description></item><item><title>Cancellation with AbortController: stopping work nobody needs</title><link>https://engrain.getbyterush.com/js/js-11/js-11-04-cancellation-with-abortcontroller</link><guid>https://engrain.getbyterush.com/js/js-11/js-11-04-cancellation-with-abortcontroller</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Cancel fetch requests and your own async functions with AbortController and AbortSignal. Timeouts with AbortSignal.timeout, combining signals with any, and cleanup in React effects.</description></item><item><title>Race conditions in the UI: when the old answer arrives last</title><link>https://engrain.getbyterush.com/js/js-11/js-11-05-race-conditions-in-the-ui</link><guid>https://engrain.getbyterush.com/js/js-11/js-11-05-race-conditions-in-the-ui</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Why a search box shows results for an older query, and how to fix it: last-request-wins with abort or request IDs, debounce races, optimistic updates with rollback, and double-submit guards.</description></item><item><title>Retry, timeout and backoff: failing well when the network does not</title><link>https://engrain.getbyterush.com/js/js-11/js-11-06-retry-timeout-and-backoff</link><guid>https://engrain.getbyterush.com/js/js-11/js-11-06-retry-timeout-and-backoff</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Retry only safe operations, wait longer each time with exponential backoff and jitter, respect Retry-After, and use timeouts that really stop the work.</description></item><item><title>Concurrency control: run many async tasks, but not all at once</title><link>https://engrain.getbyterush.com/js/js-11/js-11-07-concurrency-control</link><guid>https://engrain.getbyterush.com/js/js-11/js-11-07-concurrency-control</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Promise.all on 500 uploads gets you rate-limited; one at a time is too slow. Build a promise pool that runs N at a time and keeps results in order.</description></item><item><title>Garbage collection: how JavaScript frees memory you no longer use</title><link>https://engrain.getbyterush.com/js/js-12/js-12-03-garbage-collection</link><guid>https://engrain.getbyterush.com/js/js-12/js-12-03-garbage-collection</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Reachability, mark-and-sweep, V8's young and old generations, concurrent marking in Orinoco, and why GC pauses cause jank. Explained with a runnable demo.</description></item><item><title>Finding and fixing memory leaks in a single-page app</title><link>https://engrain.getbyterush.com/js/js-12/js-12-04-finding-and-fixing-memory-leaks</link><guid>https://engrain.getbyterush.com/js/js-12/js-12-04-finding-and-fixing-memory-leaks</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>The common leaks (listeners, timers, closures, detached DOM, unbounded caches), how to prove them with heap snapshots and the allocation timeline, and how to stop them on route change.</description></item><item><title>Error types, cause and custom errors: errors that tell you what went wrong</title><link>https://engrain.getbyterush.com/js/js-13/js-13-01-error-types-cause-and-custom-errors</link><guid>https://engrain.getbyterush.com/js/js-13/js-13-01-error-types-cause-and-custom-errors</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>The built-in error types, wrapping errors with cause, writing custom error classes that work with instanceof, AggregateError, Error.isError, and why you never throw strings.</description></item><item><title>Global error handling and source maps: seeing the errors your users see</title><link>https://engrain.getbyterush.com/js/js-13/js-13-02-global-error-handling-and-source-maps</link><guid>https://engrain.getbyterush.com/js/js-13/js-13-02-global-error-handling-and-source-maps</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Catch every uncaught error with the error and unhandledrejection events, fix the cross-origin "Script error.", read minified stack traces with source maps, and report errors safely.</description></item><item><title>Discriminated unions and exhaustive checks: making illegal states impossible</title><link>https://engrain.getbyterush.com/ts/ts-02/ts-02-02-discriminated-unions-and-exhaustive-checks</link><guid>https://engrain.getbyterush.com/ts/ts-02/ts-02-02-discriminated-unions-and-exhaustive-checks</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Model loading, success and error states with a tag field, let TypeScript narrow each case, and use never so the compiler tells you about every case you forgot.</description></item><item><title>Type guards and assertion functions: teaching TypeScript what you checked</title><link>https://engrain.getbyterush.com/ts/ts-02/ts-02-03-user-defined-type-guards-and-assertion-functions</link><guid>https://engrain.getbyterush.com/ts/ts-02/ts-02-03-user-defined-type-guards-and-assertion-functions</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Write x is T type predicates and asserts functions, know when TypeScript 5.5 infers predicates for you, and filter arrays to the right type, without lying to the compiler.</description></item><item><title>as const, satisfies and literal inference: precise types without lying</title><link>https://engrain.getbyterush.com/ts/ts-02/ts-02-04-as-const-satisfies-and-literal-inference</link><guid>https://engrain.getbyterush.com/ts/ts-02/ts-02-04-as-const-satisfies-and-literal-inference</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Why TypeScript widens "md" to string, how as const keeps literal types, how satisfies checks a value without losing its type, and why as is an assertion, not a conversion.</description></item><item><title>keyof, typeof and indexed access: building types from your values</title><link>https://engrain.getbyterush.com/ts/ts-05/ts-05-01-keyof-typeof-and-indexed-access-types</link><guid>https://engrain.getbyterush.com/ts/ts-05/ts-05-01-keyof-typeof-and-indexed-access-types</guid><pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate><description>Derive types from data instead of writing them twice: keyof for property names, typeof in type position, T[K] to read a property's type, and T[number] for array items.</description></item></channel></rss>