Skip to content
yceffort
PostsSeriesTagsAbout🧪 Research
KO

Tweaks

theme
accent palette
film grain
minimal mode
20 POSTS

Web-performance 1

  • â—† Improving number-flow · Part 2
    #web-performance#animation#browser

    Improving number-flow Performance: Moving Animations onto the Compositor Thread

    In the number-flow fork I built to support old browsers, animations in modern browsers were still recalculating styles on every frame. This post records how 0.2.0 moved additive compositing into transform and opacity keyframes, how the change was measured, and the costs that remain in the mask and in interruptions.

    2026-10-07·24 min read
  • â—† Building coldpath · Part 3
    #debugging#web-performance

    Tracing Toss Securities JavaScript Without Source Maps

    Chuseok side quest, part 3: with love, to Toss Securities

    2026-09-26·26 min read
  • â—† Building coldpath · Part 2
    #web-performance#bundler#debugging

    Building a Bundle Analyzer with V8 Coverage and Source Maps

    Chuseok side quest, part 2: building a V8 coverage analyzer, one dead end after another.

    2026-09-22·24 min read
  • â—† Building coldpath · Part 1
    #web-performance#bundler#blogging

    Tracing When This Blog's JavaScript Actually Runs

    Chuseok side quest, part 1: starting with my own blog

    2026-09-22·20 min read
  • #web-performance#javascript#browser

    I Grew Never-Executed JavaScript to 10MiB

    How much do you lose when 10MiB of functions you never call ships to the browser? I ran 855 measurements to separate the cost created by bytes from the cost created by the shape of the code. Uncalled declarations cost about 21ms per MiB and did not grow when I slowed the CPU by 4x, while initialization code that runs the moment the file is read added 201ms per MiB to the main thread. With real libraries, merely importing a module was enough to evaluate it.

    2026-09-16·32 min read
  • #bundler#web-performance#debugging

    Tearing Apart a Third-Party SDK and Rebuilding It My Way: Without Touching a Single Line of Logic

    I imported one constant and 97.7% of the bundle came along with it. The vendor had no timeline for a fix, so I pried open the published source maps, recovered over 400 TypeScript files, and rewrote the build, the entry points, and the dependencies however I wanted. Everything except the logic. That got /send to -77.5% raw. The hard part came after. All 1,932 tests passed, and a few of them were watching nothing at all.

    2026-08-31·41 min read
  • â—† Service Worker Caching Deep Dive · Part 3
    #service-worker#web-performance#caching

    Measuring the Cost of Going Through a Service Worker: Building in the Lab the Control Group GA4 Could Not Give Me

    I set out to confirm the 500 ms hint that part 2 left behind, but the hard reloads that would form the control group arrive at under one a day. So I built the control group myself, with Playwright and a shaping proxy, and found that going through the worker costs 2 ms on a navigation, and that the cost is not latency but the bytes the worker fetches in the background on every click. The gap I had left between the lab and the field turned out, only after the post was written, to be a measurement definition difference created by 103 Early Hints. Third part of the service worker caching deep dive series.

    2026-08-28·Updated 2026-09-02·50 min read
  • â—† Service Worker Caching Deep Dive · Part 2
    #service-worker#caching#nextjs

    Applying Service Worker Caching: App Router Traps and GA4 Field Data

    Armed with the theory from Part 1, I made this blog (Next.js App Router) open offline. On the first deploy, the post I had just read would not open offline; on the second, posts opened but every image was broken. This is a chronicle of fixing, one deploy at a time, the traps created by soft navigation, prefetching, and next/image, and a record of settling the results with GA4 real-user data. Returning-visitor FCP improved by 634ms on average, while TTFB worsened by 525ms on average. The second post of the Service Worker Caching Deep Dive series.

    2026-08-27·Updated 2026-09-02·27 min read
  • #animation#web-performance#debugging

    Killing Frame Drops in a framer-motion Banner: Two Wrong Turns and One Easing Function

    A banner built with framer-motion made the entire home screen stutter for the 0.6 seconds it took to open. The record of guessing the cause from the code, having that guess overturned twice by measurement, and finally removing the reflow with a single easing function. Plus what the work left behind: the gap between declaration and execution, the principle that properties decide performance, preserving mechanisms, suspecting your instruments first, and proving sameness with a curve.

    2026-08-15·30 min read
  • â—† Service Worker Caching Deep Dive · Part 1
    #service-worker#caching#browser

    How Service Worker Caching Works: The Proxy, the Lifecycle, and Five Strategies

    A service worker is a programmable proxy standing between your site and the network. Where does it stand, why does the cache rot, why am I seeing the old version after deploying, what goes in under which strategy, and so, should you use it? Holding on to five questions you actually meet in practice, this post goes down to the details of state transitions and to a real measurement in which a 104KB opaque response was accounted as 6.6MB of storage. It is the general theory that did not fit into the cache chapter of Frontend Performance Optimization Deep Dive (published in Korean), and the first post of the Service Worker Caching Deep Dive series.

    2026-08-12·Updated 2026-09-02·24 min read
  • â—† Kubernetes for Frontend Developers · Part 5
    #kubernetes#devops#web-performance

    Autoscaling Is Automatic but Not Instant: HPA's Timeline, Measured Segment by Segment

    Raise traffic 12x and it takes 31.5 seconds for a new pod to receive its first request. I pulled an itemized bill for those 31.5 seconds with a stopwatch: the structure dominated by the detection window, the conditions under which the autoscaler goes blind in the five minutes right after a deploy, the scale-down staircase, why memory-based HPA misfires on Node, and KEDA's preemptive scaling. Part 5 of the Kubernetes for frontend developers series.

    2026-08-10·25 min read
  • #bundler#code-review#web-performance

    The invisible cost in PR diffs: we are not reviewing the code our users receive

    The bundle costs that code review misses, and how to surface them in the PR.

    2026-05-03·22 min read
  • â—† Directive Deep Dive · Part 3
    #react#nextjs#caching

    'use cache' Directive Deep Dive: To the End of Cache Boundaries

    Build-time transformations, cache key serialization, ResumeDataCache, cacheHandler, and Cache Components - everything created by a single 'use cache' line

    2026-05-01·Updated 2026-09-04·40 min read
  • â—† Directive Deep Dive · Part 1
    #react#nextjs#bundler

    'use client' Directive Deep Dive: To the Edge of Client Boundaries

    Module boundaries created by a single line of 'use client', build-time transformations, Flight serialization, and performance implications

    2026-05-01·33 min read
  • â—† The State of Next.js · Part 4
    #nextjs#web-performance#react

    Is Next.js Fast Enough?

    The uncomfortable truth benchmarks reveal

    2026-03-21·23 min read
  • â—† The State of Next.js · Part 1
    #nextjs#serverless#backend

    The Rise and Fall of Next.js Edge Runtime

    Hey Edge Middleware, how have you been?

    2026-03-16·13 min read
  • #accessibility#web-performance#design-patterns

    The Downfall of Infinite Scroll — Why Google Removed Infinite Scrolling

    How infinite scroll is being reevaluated from UX, performance, accessibility, and legal perspectives

    2026-02-21·9 min read
  • #react#compiler#web-performance

    React Compiler Deep Dive: From Principles to Output

    A deep exploration of how React Compiler analyzes code and what it produces, from pipeline to final output.

    2026-02-19·24 min read
  • #memory#web-performance#design-patterns

    Preventing Memory Leaks with IntersectionObserver Singleton Pattern and WeakMap

    How to efficiently observe hundreds of elements while preventing memory leaks

    2026-01-17·13 min read
  • #web-performance#memory#async

    How to Efficiently Process Massive JSON Responses

    How to survive when JSON.parse() becomes overwhelming

    2026-01-11·18 min read
Page 2→
mailMail icongithubtwitter
yceffort
•
© 2026
•
https://yceffort.kr