Sign in

Stoyan Stefanov

@stoyan.me
1.5K followers 251 following 382 posts

stoyan.me, PerfPlanet, "JavaScript Patterns", "React: Up & Running", YSlow, SmushIt. Formerly of Facebook, WebPageTest, Yahoo

PostsRepliesMedia
Stoyan Stefanov @stoyan.me · 04/10/2026
My friend Javor Vatchkov just launched bandscheck.com, a nice way to see who's playing in your area tonight and in the future. Fun way to discover new artists too, thanks to audio (video) sample of each artist's work. Give it a spin!
000
Stoyan Stefanov @stoyan.me · 30/09/2026
america.gov vs gov.uk on my iPhone 8 (Safari 15). Watch this talk www.youtube.com/watch?v=VdBx... by @therealnooshu.bsky.social Hobbs about what happened during the pandemic, people desperately looking for gov't info and browsing with horrible connections on devices such as ...
162
Stoyan Stefanov @stoyan.me · 26/09/2026
000
Stoyan Stefanov @stoyan.me · 30/12/2025
New blog post about subsetting a ligature-heavy font highperformancewebfonts.com/read/subsett... Almost always we subset based on text. But in my case, a more fine-tuned glyph-based approach saves 91% of bytes as opposed to 74% in the usual way. Worth it?
000
Stoyan Stefanov @stoyan.me · 24/12/2025
New blog post "Lazy-Loading Optional Fonts with Native Browser API" describing a wee trick I do on sightread.org to load music glyphs, optionally highperformancewebfonts.com/read/lazy-lo...
020
Stoyan Stefanov @stoyan.me · 09/12/2025
Hello London!
Full-and-proper English breakfast plate
010
Stoyan Stefanov @stoyan.me · 02/12/2025
Bug or a feature: selecting code in the devtools console makes some tokens black rather than white?
010
Stoyan Stefanov @stoyan.me · 29/10/2025
perforomance.run() everybody! The latest API available to folks visiting for #perfnow
120
Stoyan Stefanov @stoyan.me · 11/07/2025
Ha! @11ty.dev folks have opened a Beverly Hills location /cc @zachleat.com
170
Stoyan Stefanov @stoyan.me · 17/06/2025
Not the web-type of performance
0100
Stoyan Stefanov @stoyan.me · 26/05/2025
performance.now() conference by @ppkoch.bsky.social and friends is back again for another edition: perfnow.nl 2 days, single-track, 100% web performance geekout happening 30th and 31st of October in Amsterdam. First 9 speakers announced, tickets on sale now.
Phil Hawksworth
Tammy Everts
Tim Kadlec
Marcy Sutton Todd
Harry Roberts
Michal Mocny
Vinicius Dallacqua
Umar Hansa
Andy Davies
031
Stoyan Stefanov @stoyan.me · 25/05/2025
highperformancewebfonts.com/read/pick-ch... A quick JS snippet that adds a feature to fontdrop.info to hand pick characters for subsetting with Glyphhanger. You click around and get a command generated that looks like: $ glyphhanger --format=woff2 --subset="font.otf" --whitelist="U+0025,U+0026...
Screenshot of the blog post
040
Stoyan Stefanov @stoyan.me · 25/04/2025
Font sizing intensifies
050
Stoyan Stefanov @stoyan.me · 08/04/2025
lazy, aren't we?
110
Stoyan Stefanov @stoyan.me · 03/04/2025
Read in 2025 so far, in an attempt to work on my attention span
020
Stoyan Stefanov @stoyan.me · 31/03/2025
I need to make like a 100 slides for a class I'm taking and I found this little tool is perfect www.markdowntoolbox.com/tools/conver...
Screenshot of a tool that converts markdown to powerpoint
020
Stoyan Stefanov @stoyan.me · 18/02/2025
I found one here (next to Firebug and something called "PageTest" :D ) calendar.perfplanet.com/2009/perform...
210
Stoyan Stefanov @stoyan.me · 14/02/2025
getting all "scientific" on linkedin's URL shortening logic. Seems like URLs > 26 characters are shortened in posts, but left alone in comments
100
Stoyan Stefanov @stoyan.me · 11/02/2025
Put this in your console: setInterval = setTimeout = requestAnimationFrame = console.log ... end you might be stunned, nay, horrified by what's happening in your app, especially with third-party code (inspired by @andydavies.me)
040
Stoyan Stefanov @stoyan.me · 07/02/2025
I hung out in the Chicago public library today and I found someone has checked out one of my books. I'm torn between being proud someone is reading or feeling guilty and responsible for the person reading a 9-year old book. I mean the second edition feels old, let alone the 1st
150
Stoyan Stefanov @stoyan.me · 06/02/2025
"Which local fonts can I use?" writeup, official docs and a web app to gather field data so we can have an authoritative answer to this question now and in the future highperformancewebfonts.com/read/which-l...
140
Stoyan Stefanov @stoyan.me · 01/02/2025
New blog post: "First timid steps in Rust" www.phpied.com/first-timid-... 1. Install Rust 2. A new project 3. Add dependencies to Cargo.toml 4. All ok so far? 5. Tweaks in src/main.rs 6. (Optional, VSCode only) install rust-analyzer Rust in peace!
110
Stoyan Stefanov @stoyan.me · 01/02/2025
I'm having troubles uploading a video. It's an MP4 encoded by Handbrake that seems to work in QuickTime, linkedIn, etc. I'm on Firefox @support.bsky.team
110
Stoyan Stefanov @stoyan.me · 27/01/2025
My attempt at clarifying what we mean when we say font, font-family, font-face, typeface, etc. highperformancewebfonts.com/read/font-ja...
High-Performance Web Fonts
Tools and resources on how to use web fonts without sacrificing page loading speeds
Mon Jan 27 2025
Font Jargon
Typeface, font-face, font-family, font collection, web font... do all of these just mean font? And what is a font exactly? Let's take a minute to define some words more precisely, at least their use in web development context (as opposed to traditional printing). After all, unambiguous terms always help our understanding of a concept.

Font and Typeface
All in all, there are two biggies: font and typeface. A typeface is a design of all characters and glyphs and numbers and symbols that match the type designer's aesthetic and vision. You cannot use a typeface directly, it's just the blueprint. A font is one particular implementation of the design. A font you can use.
050
Stoyan Stefanov @stoyan.me · 25/01/2025
Today's mini-post on fonts turned out not so mini. A look into the past and future of `-apple-system` and `BlinkMacSystemFont`: highperformancewebfonts.com/read/ditch-B...
0184
Stoyan Stefanov @stoyan.me · 24/01/2025
New mini-post, this time on extreme font subsetting highperformancewebfonts.com/read/extreme...
1123
Stoyan Stefanov @stoyan.me · 23/01/2025
There *is* a solution to 🧭 Safari's annoying insistence of adding its little triangle icon to <details><summary> and it's summary::-webkit-details-marker { display: none; }
030
Stoyan Stefanov @stoyan.me · 23/01/2025
A quick note on the importance of adding `crossorigin` when <link>-preloading fonts: highperformancewebfonts.com/read/on-the-... Otherwise you get duplicate font downloads and the preload is unused
082
Stoyan Stefanov @stoyan.me · 21/01/2025
Fafofal (Fabulous Font Fallbacks): now with buttons for bold and italics in the test area highperformancewebfonts.com/tools/fafofal/
051
Stoyan Stefanov @stoyan.me · 21/01/2025
Ha, since when does Chrome do this? CTRL + Refresh gives you options
330
Stoyan Stefanov @stoyan.me · 16/01/2025
"Menlo Regular" is a font - a specific instance of the Menlo typeface. When we say "Menlo" we may mean three different things: a typeface, a font collection (a .ttc file) or a font family. Confusion? Yes, please.
050
Stoyan Stefanov @stoyan.me · 10/01/2025
Friends concerned about me & family's safety in LA fire, here's a map. The red arrow points at where we live. Not too close to be affected. We can smell smoke and see little bits of ash in the air, but we're good otherwise. The two yellow rectangles are "warning" next to the red "evacuation zone"
180
Stoyan Stefanov @stoyan.me · 02/01/2025
The article shows the troubles with `local()`... E.g. `local('Avenir')` doesn't work in Chrome (it needs `Avenir Book`) but it does in FF. FWIW here's an automated way to test for support which seems to work correctly across browsers. "Correctly" meaning the same behavior as when used in CSS
await new FontFace('test', 'local("Avenir")').load().then(
  () => true, // Avenir is available to use with local()
  () => false // 😰
);
020
Stoyan Stefanov @stoyan.me · 01/01/2025
Look ma, I'm in the paper 🤘
1140
Stoyan Stefanov @stoyan.me · 30/12/2024
Anyone wants to beta-test a new font-face fallback tool? highperformancewebfonts.com/tools/fafofal/ A spiritual (to say the least) descendant of tools and ideas by @industrialempathy.com @notwaldorf.bsky.social and Katie Hempenius. Pictured below: Poppins.ttf from G-fonts with Avenir Book fallback
Poppins.ttf from Google fonts with Avenir Book fallback and CS font-face result generated by a tool called Fafofal (Fabulous Font Fallbacks)
141
Stoyan Stefanov @stoyan.me · 28/12/2024
Improving CLS from 0.00 to 0 (I kid you not!) with a better @font-face fallback
1120
Stoyan Stefanov @stoyan.me · 20/12/2024
this a little ironic :)
121
Stoyan Stefanov @stoyan.me · 19/12/2024
:D
010
Stoyan Stefanov @stoyan.me · 19/12/2024
The web application quality we've grown to expect from our financial institutions (embark.ca in this case)
110
Stoyan Stefanov @stoyan.me · 13/12/2024
How did I manage to mess up a "social" image everywhere? I saw the portrait image on after posting on bsky and then changed to landscape with white space. LinkedIn - tiny. Threads - cut off. Twitter - killed the punch line. Mastodon - win!
120
Stoyan Stefanov @stoyan.me · 11/12/2024
someone needs a break 🍻
160
Stoyan Stefanov @stoyan.me · 10/12/2024
These are some rookie numbers :)
010
Stoyan Stefanov @stoyan.me · 08/12/2024
oh, Safari uses a cute little font called `.AppleSystemUIFontMonospaced` when you do `font: ui-monospace, monospace;` (The other browsers use Menlo) All one needs to know about fonts in 2025 is: body {font-family: system-ui; sans-serif} code, pre {font-family: ui-monospace; monospace}
241
Stoyan Stefanov @stoyan.me · 07/12/2024
You can force garbage collection in your JS by starting Chrome with a flag: open "/Applications/Google Chrome.app" --args --js-flags=--expose-gc Now you can call `gc()` to collect the rubbish :)
061
Stoyan Stefanov @stoyan.me · 05/12/2024
In a burst of 2000's nostalgia I added border-radius: 4px everywhere on the perfplanet calendar
290
Stoyan Stefanov @stoyan.me · 03/12/2024
HackerNews' markup is... entertaining. A spacer gif, a spacer table row (a table layout too) and even "morespace" to finish off the table. You know... more space, when you just need a little something extra. Should've gone to 11px.
2174
Stoyan Stefanov @stoyan.me · 02/12/2024
Here's a one-liner to append a (social) sharing button to any page, in this case a wordpress blog post. Web Share API FTW!
1161
Stoyan Stefanov @stoyan.me · 29/11/2024
A cacheful of samples :D
000
Stoyan Stefanov @stoyan.me · 29/11/2024
Here we have 3 MP3 samples served from service worker cache. And one E3 (aka MIDI note 52) is having its URL rewritten, requested from the new "correct" URL and then also cached.
100
Stoyan Stefanov @stoyan.me · 29/11/2024
Ha! So in JS, a default function param can be the value of another param
4165