Hacker News

Top stories

Live mirror
30 storiesupdated just nowView source snapshot
  1. OpenAI Feared "Optics" of what might appear on Hacker News (authorsguild.org)
    72comments
  2. Does Georgism work? Five years later (astralcodexten.com)
    235comments
  3. Flip Fluid on Flip Dots (mitxela.com)
    9comments
  4. Meta Blocks President Lula's Facebook Page, Campaign Ads 2 Weeks from Election (reddit.com)
    10comments
  5. Go Concurrency Distilled (antonz.org)
    71comments
  6. PipePipe: NewPipe hard fork implementing SponsorBlock (github.com/infinityloop1308)
    226comments
  7. Improving site performance by shipping more CSS (github.blog)
    20comments
  8. DeepSeek Elastic Compute (DSec) (arxiv.org)
    79comments
  9. Show HN: Reladraw – A diagram language where you decide where to place things (github.com/reladraw)
    81comments
  10. C's Flexible Integer Sizes Were Not a Design Mistake (pikuma.com)
    15comments
  11. A searchable library of forgotten public-domain film clips from 1915 onward (movingimagearchive.com)
    26comments
  12. Biology might not be quantum, but its math is quantumlike (quantamagazine.org)
    23comments
  13. What is the size of Yemen? (2024) (theborys.substack.com)
    35comments
  14. ASML says it sold 'absolutely nothing' in Europe in 2026 (tomshardware.com)
    619comments
  15. Fifteen years later, the Apple Cards origin story (lexontech.org)
    102comments
  16. The internet discovers TLA+. Now what? (reasonable.io)
    1comments
  17. Reverse-engineering the Intel 8087's tangent algorithm: more than CORDIC (righto.com)
    11comments
  18. Drawgent: Coding agent on a live Excalidraw canvas (tangled.org/yanndegat.tngl.sh)
    41comments
  19. LP Voting and Investor Consent for AIFs (taghash.io)
    —discuss
  20. An agent used DNS to reach an external chatbot (alignment.openai.com)
    96comments
  21. Exploding variance of means of exponentials: least-squares to the rescue (francisbach.com)
    —discuss
  22. How I changed teaching after AI managed to do all my homework assignments (thelastsoftwareengineer.substack.com)
    179comments
  23. Promising discoveries about the potential for life on one of Saturn’s icy moons (fu-berlin.de)
    30comments
  24. Turning GLM-5.3-Flash into a Jev-like decision model (privatemode.ai)
    38comments
  25. How to keep enjoying programming in a world of LLMs (haskell.org)
    268comments
  26. Snap Wants to be a State Actor??–Kansas v. Snap (ericgoldman.org)
    12comments
  27. Evolving programming languages in the AI era (dashbit.co)
    56comments
  28. Modern Object Pascal Introduction for Programmers (castle-engine.io)
    75comments
  29. Bob Mackie dressed stars–if they were brave enough (economist.com)
    1comments
  30. We Should Be Able to Change Our Languages (jimmyhmiller.com)
    20comments

Improving site performance by shipping more CSS

37 pointsby 20h agogithub.blog
19 comments
3h agoHN ↗

Sometimes, [GitHub] posts a [blog post in which they move away from] some terrible [way of doing things] I've never heard before, and it's a weird indirect way to learn how awful their other [design choices] must be.

https://xkcd.com/2071/

2h agoHN ↗

Once (like a year ago or so) stumbled upon some person's post asking for someone to help them to "fix" some section at their website. It was done !important over !important over !important over !important. Said person was really convinced all it needed was another bunch of !important because apparently that was what ai spit for them, at least at that time

2h agoHN ↗

And yet, there's been a glaring overflow bug on every repo page if the repo has a sponsor button on Firefox Android for months.

2h agoHN ↗

css-in-js? Rofl. Whats next? Html-in-js?

2h agoHN ↗

Honestly, hats off to them. It's hard to get anything done with Copilot so I'm amazed they even managed to do this.

2h agoHN ↗

There's room for improvement still. Currently, the production build is using long-dev class names. e.g. `DirectoryContent-module__Box_3__gl6dE` could be compiled to a shorter hash like `gl6DE3a2`.

If you use Vite:

  css: {
    modules: {
      generateScopedName: mode === 'production'
        ? '[hash:base64:8]'
        : '[name]__[local]___[hash:base64:5]',
      }
    }
2h agoHN ↗

Would you need a source map then for prod debugging?

1h agoHN ↗

The improvement would be shipping human-readable structure to allow easier user overrides, not that hash abomination

1h agoHN ↗

Those class names surely gzip better than hashes over the wire?

1h agoHN ↗

Here's a comparison using `brotli --best` on my app.

   53K _long.css
   38K _short.css

   11K _long.css.br
  8.9K _short.css.br

Both, dev and prod, have hashes because that's part of what CSS Modules uses to avoid collisions.

Besides download size, smaller names improve parsing speed too.

1h agoHN ↗

This.

The only thing hashing classes achieves is making it difficult for users to use ad blockers and/or custom CSS. I understand why e.g. Meta does it on their sites, but for GitHub it makes no sense.

1h agoHN ↗

Unfortunately the original blog post introducing the great CSS-in-JS system being removed is not in the "Related posts" section, would be nice to compare the thinking in the two

1h agoHN ↗

I don't know how they perceive the performance. I see 41 network requests. That's 2.1 MB of CSS over the wire, blocking rendering and hurting painting and loading speed. There's 400 KB of Tailwind, 87 KB of general CSS, plus another 200 KB of other general CSS. They need to embrace functional CSS properly. I'm sure they could have a single CSS file under 80 KB that renders everything.

1h agoHN ↗

These type of comments often come from a place of arm-chair reasoning where you might not sit on the experience of working hands-on in a large team on a large product. While it’s probably true that X kB sufficient, that amount of performance optimisation is usually not warranted at this scale. Maintaining a design system, working with scoped classes, legacy code, and dealing with the complexities of chunking and probably further challenges we are not aware of from the outside. It seems like a common sentiment on HN (maybe not you in particular) is that engineers should drop everything and work overtime on optimizing performance, when it comes to web apps

1h agoHN ↗

The beauty of functional CSS is that you can progressively transform everything. GitHub runs on entire modularized codebase, they can clean up the entire codebase within weeks, days if they use agents and see the effects of performance instantly.

45m agoHN ↗

The shitty team excuse.

Performance is not complicated. You measure something and compare the numbers. Through my career I have encountered the following failures repeatedly:

* The complete inability to measure things. This is common among people with low social intelligence. Many people in this line of work cannot measure things and form all kinds of bullshit excuses. Cannot do it all as if they are disabled. Sometimes it is laziness, sometimes it’s autism masking, and sometimes it’s stupidity/ignorance where they believe they shouldn’t have to or are superior from convention alone.

* The shitty team argument. It’s common for people to intentionally avoid or discard measures because there is fear superior performance may indicate an operating deficit. The last thing anybody in software wants is to change approach if they are on a shitty team, because corporate developers are allergic to training people. This is often justified by asking what happens if you work on a team or about new hires.

* Throwing performance data away and lying about it. This is very common when performance data provides evidence that current conventions or favorite tools harm performance. If, for example querySelectors measure 100,000 times slower than some other approaches developers will pretend the performance evidence just doesn’t exist.

* Guessing. When people suck at what they do they invent their own performance realities. When people guess at software performance they are supremely wrong more than 80% of the time and tend to be wrong by multiple orders of magnitude.

26m agoHN ↗

You’re confidently making a lot of assumptions that don’t generalize.

For example:

performance is not complicated

Not to mention all your assumptions about the motivations of people who don’t do optimization well. That one can’t possibly generalize.