Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature(gatsby): Extract non-css-in-js css and add add to <head> when SSRing in dev #28471

Merged
merged 44 commits into from
Jan 4, 2021

Conversation

KyleAMathews
Copy link
Contributor

@KyleAMathews KyleAMathews commented Dec 3, 2020

To avoid FOUC when a site uses regular CSS. CSS-in-JS already adds its css during dev ssr.

We remove style-loader and just use mini-css-extract-plugin with hmr enabled. Beyond making dev-ssr work as expected — it also solves a persistent problem people have with their styles behaving different in production vs development. The current dev styles setup often loads css in a different order depending on what page you visit or the order that you edit files, etc. Moving to mini-css-extract-plugin means that styles are extracted and loaded the same way in dev & production.

The main downside I could see to this approach is the mini-css-extract-plugin says style-loader is faster at HMR. This is true but the times seem comparable & acceptable still.

I added tailwind to the ssr integration test as it adds ~210kb of css so to simulate a larger amount of css. With this setup, HMR times increase from ~250ms w/ style-loader to ~330ms w/ mini-css-extract-plugin or a ~35% increase.

I copied in as well a large chunk of css off a site found on the interwebs and compilation jumped to 2050ms for style-loader and 2500ms for mini-css-extract-plugin for a 22.5% increase.

The compilation decrease seems ok given it's still fast & it unblocks dev-ssr & we're removing confusing differences between prod & dev environments.

@gatsbot gatsbot bot added the status: triage needed Issue or pull request that need to be triaged and assigned to a reviewer label Dec 3, 2020
@KyleAMathews KyleAMathews added type: feature or enhancement Issue that is not a bug and requests the addition of a new feature or enhancement. and removed status: triage needed Issue or pull request that need to be triaged and assigned to a reviewer labels Dec 3, 2020
@KyleAMathews KyleAMathews marked this pull request as draft December 4, 2020 01:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
topic: DX Developer Experience (e.g. Fast Refresh, i18n, SSR, page creation, starters) type: feature or enhancement Issue that is not a bug and requests the addition of a new feature or enhancement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants