AboutBlogContact
FrontendApril 12, 2023 2 min read 25

Zero-Runtime CSS-in-JS: The Performance King (2023)

AunimedaAunimeda
📋 Table of Contents

Zero-Runtime CSS-in-JS: The Performance King

In 2023, the tide has turned on CSS-in-JS. For years, we loved the developer experience (DX) of styled-components and emotion. Writing CSS directly in our JavaScript files was amazing. But then we started noticing the cost: a heavy runtime script and constant style re-calculations during re-renders, which killed our Core Web Vitals.

The solution? Zero-runtime CSS-in-JS. This new breed of libraries (like Vanilla Extract, Linaria, and Meta's StyleX) gives us the DX of CSS-in-JS but extracts the styles into real .css files at build time.

The Problem: The Runtime Tax

When you use a traditional CSS-in-JS library, your browser has to:

  1. Parse the JavaScript.
  2. Run the runtime to generate unique class names.
  3. Inject the <style> tag into the head.
  4. Recalculate styles every time a component re-renders.

This leads to "Cumulative Layout Shift" (CLS) and "Interaction to Next Paint" (INP) issues.

Practical Example: Vanilla Extract

In 2023, Vanilla Extract is the leader in this space. It's written in TypeScript and provides type-safe CSS that disappears at runtime.

// styles.css.ts
import { style } from '@vanilla-extract/css';

export const button = style({
  backgroundColor: 'blue',
  color: 'white',
  padding: '10px 20px',
  borderRadius: '4px',
  ':hover': {
    backgroundColor: 'darkblue',
  },
});

And then in your component:

// button.tsx
import * as styles from './styles.css.ts';

export const Button = () => (
  <button className={styles.button}>
    Click Me
  </button>
);

The result? The browser sees a regular HTML <button class="styles_button__1abc"> and a regular CSS file. Zero JavaScript is required to render those styles.

The Entry of StyleX

We can't talk about 2023 without mentioning StyleX, Meta's internal CSS library that was recently open-sourced. It's designed for massive scale and follows the same zero-runtime philosophy, with a focus on predictability and performance.

Is This the End of Styled Components?

Not necessarily. For smaller projects or highly dynamic components, traditional CSS-in-JS is still fine. But for high-traffic sites where every millisecond counts, the movement is clear: extract your styles at build time.

In 2023, performance is no longer a "nice-to-have." It's a requirement. If your styling solution is adding 30KB of JavaScript to your bundle, it's time to consider a zero-runtime alternative.

Read Also

Qwik: Resumability vs. Hydration (2022)aunimeda
Frontend

Qwik: Resumability vs. Hydration (2022)

Is the era of hydration over? In 2022, Misko Hevery's Qwik introduces 'resumability' to achieve instant-on web apps.

WebGL: High-Performance Data Visualization on the Web (2021)aunimeda
Frontend

WebGL: High-Performance Data Visualization on the Web (2021)

When SVG and Canvas 2D hit their limits, WebGL is the answer. In 2021, we are visualizing millions of data points with the GPU.

Tailwind CSS JIT: Transforming Build Times and Workflow (2020)aunimeda
Frontend

Tailwind CSS JIT: Transforming Build Times and Workflow (2020)

The JIT engine is the biggest shift in Tailwind's history. No more 10MB development CSS files—just pure speed and on-demand generation.

Need IT development for your business?

We build websites, mobile apps and AI solutions. Free consultation.

Get Consultation All articles