Skip to content
yceffort
PostsSeriesTagsAbout🧪 Research📰 News
KO

Tweaks

theme
accent palette
film grain
minimal mode
20 POSTS

Web-performance 1

  • #web-performance#software-engineering#essay

    In Performance Work, the Techniques Were Short and the Judgment Was Long: Preparation, Observation, Response, Verification, Measurement

    I think order matters more than technique in performance work. This post lays out the practical flow: settle the support range and dependencies first, measure before picking a technique, decide what to fix first, choose a response when the cause lives in someone else's code or infrastructure, prove nothing broke and keep it guarded, and report numbers by grade.

    2026-10-26·35 min read
  • ◆ Core Web Vitals 직접 수집하기 · Part 4
    #web-performance#devops#debugging

    Self-Hosting Core Web Vitals Collection for a Quiet Blog

    Moved a Core Web Vitals collection setup designed for shared observability infrastructure to my personal blog. Fixed a dashboard left empty by sparse traffic and changed when metrics are collected for ordinary browsers. This post records the changes from October 17 to 22, query omissions investigated on October 23, and what five days of data can support.

    2026-10-23·32 min read
  • ◆ Core Web Vitals 직접 수집하기 · Part 3
    #web-performance#devops#debugging

    Sending the Core Web Vitals of an App Webview to a Shared Observability Platform

    Sent the Core Web Vitals measured in an app webview to an observability platform shared by many teams. The webview gave no signal on leaving, and tail sampling, delta-to-cumulative conversion and Tempo queries each dropped values in their own way without raising an error. For every setting that could not be changed, re-measured what was lost in a reproduction environment.

    2026-10-22·Updated 2026-10-23·37 min read
  • ◆ Core Web Vitals 직접 수집하기 · Part 2
    #web-performance#debugging#browser

    Sending Core Web Vitals at the Moment of Leaving the Page

    Traced why CLS and INP go missing when the page is left, through the transport of OTel JS and the order in which flush runs.

    2026-10-18·Updated 2026-10-23·22 min read
  • ◆ Core Web Vitals 직접 수집하기 · Part 1
    #web-performance#debugging#browser

    When Does web-vitals Report Core Web Vitals

    Checked the conditions under which web-vitals 6.2.3 reports each metric, and why INP goes missing when the page is left right after a click.

    2026-10-18·Updated 2026-10-23·33 min read
  • ◆ 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
Page 2→
mailMail icongithubtwitter
yceffort
•
© 2026
•
https://yceffort.kr