92 comments

[ 3.3 ms ] story [ 148 ms ] thread
Anyone try running a profiler on this yet? Seems like something that could be patched by a 3rd party tool even.
Some programs (such as WordPad) use a fancy combo box to select fonts. They draw each font name in the font itself. That requires loading and rendering with each font just so it can be displayed for the preview. WordPad isn't preloading fonts at boot time though. It does the slow thing where it loads up every font when you open the combobox.
To be fair, that's how they should be displayed. I don't select a font based on its name, I select it based on its look.
Professional designers, on the other hand, need to care not just about typeface and foundry, but also about the exact version of fonts.

Back when magazines weren't nearly dead, I did production for a few years. The very first issue I worked on, I screwed up an ad by using a newer version of the font - the leading tables were different and a text block wrapped when it shouldn't have, so the advertiser got a couple free runs.

Always turned off rendering in lists and menus where I could, because it was not useful, slow, and harder to read.

I think this update to the fonts list was from some PHB instead of being requests from users. Some manager decided that the UI needed to be updated and tweaked because it was working, and we can't just let that happen
Same, but the software could:

1. Optimize for rendering the on-screen fonts first, then fill in the rest after the user’s starting looking at them.

2. Cache the preview. If it takes longer to render the sample text than to load a png, save the rendering so you can load it again next time.

It’s such a common idiom that fonts should have some kind of optimized “header” or something that can make it previewable but quick
I think for this to be generally effective for Windows software, developers on the whole not being consistent or wanting to invest the effort in little bits of polish like that, they would need an API into a system-wide implementation.

Which they could do, but it would take forever to see adoption in Windows culture, and Microsoft evidently cannot, just cannot, get their UI shit together.

To be fair, I don't care what the name of the font looks like in the font itself. I want to see the text I have selected updated with the font selected in the list.
well it also works this way.
well, this is how it should work. this "new" showing the name of the font in the font in the list is reeks from someone that had an idea, developed, tested on a system with standard fonts installed, AKA a small number of fonts, compared to someone that has a long list of fonts. Some PHB accepted it, and it got deployed only to be met by the crushing realities of users large set of installed fonts.
Ultimately, yes, that's what I want to see. But "Garamond" in the blind tells me nothing about how that will make my text look. So if I can see it before rendering all of my text in it, that's not unwelcome.
Two problems are that (1) the font name isn’t always very suitable to give a good impression of the font, and (2) for some fonts (symbol fonts, very ornate fonts, very small fonts) it can make the font name unreadable.

A better solution for the use-case of selecting fonts by looks is a dedicated font selection dialog that shows both the font name and a customizable example text in the font, and also lets you control the font size and variant (bold, italic). Some applications do exactly that.

I seem to remember that both LO and Inkscape and possibly GIMP had bugs (since resolved IIRC) that involved this exact thing.
I was wondering why they would load all the fonts, and this seems like a reasonable answer.
In principle, this could be implemented by only fully loading the font once you scroll to it in the combobox’s viewport.

Partial preprocessing might be needed, however, in order to extract the proper font names for sorting and autocomplete.

That’s pretty much what Office does anyway; it doesn’t pre-render previews for the whole list but does that when fonts scroll into view.
Back in the day, VLC or LaTeX used to use fc-cache to rebuild its font catalog when you installed some new font, and it could take quite some time if you have a lot of fonts installed. I wonder if Quicken uses something similar.
Gimp also used to rebuild the font cache every time you started it. They eventually fixed it.
Back in the day, VLC or LaTeX used to use fc-cache to rebuild its font catalog when you installed some new font, and it could take quite some time if you have a lot of fonts installed. I wonder if Quicken does something similar.
I never understood why a media player needs to enumerate all fonts and cache information about them.
iirc, to utilize the fontconfig font name matching system to determine if a particular font for say, subtitles, matches.
Yes, because in the XXI century we are still loading in memory all the "needed"(tm) assets, as CPU and disks are really slow...
Idk if still true, but in XP or 7 you could temporarily install a font by opening it in the font preview with double click.

Even if in the wrong folder, every newly started application used the font as if it was installed correctly. Close the preview and the font disappeared again.

[deleted, never mind -- I think cloud fonts are already more popular than I thought]
For that to work with paid fonts DRM would likely be involved though, and more DRM is never a good thing. Doubly so if app vendors aren't happy using the OS provided facilities, instead wanting users to use their own, and decide to embed said DRM in your personal documents.

There are also situations where fonts might be needed while offline, which despite the seemingly ubiquitous nature internet connections today is more common than one might think. It'd also mean forced decommissioning of the various ancient machines still hanging around in places like print shops that handle newly made TrueType fonts just fine.

Designers use font managers not only to help them organise the fonts per project, find duplicates etc. But also for performance by only activating the ones you need.
Wild to think that these have been a thing since at least the '90s. And fonts keep getting so much more complex, so there's basically always a reason to use one, if you use different fonts for your daily work for example.

Even so, desktop font management tools seem like they've always been these third-party tools; you don't have closer integration in the desktop space of memory-saving features even close to what browser devs work on. Like more clearly managing browser tab (font) resources dynamically when not in use / not likely to be used anytime soon.

macOS comes with Font Book, it’s not as sophisticated as the 3rd party ones but it’s usable.
Windows 10 allows you to install Fonts per user or system wide. That local directory is what's being identified in this blog post. It's a non-sequitur.

Having too many fonts can cause performance regressions in software but it's not Window's fault. Those apps generate a font cache for their UI to make it easier to select a font. Depending on how that's implemented it can be slow to generate.

I don't see anything in this blog post to indicate the offending Apps are using a native Windows UI for displaying fonts that is performing poorly.

This is like complaining that searching is slow when you have too many files on your HDD.

Furthermore, ideally shouldn't font caching be offloaded to a background thread and performed after startup? That seems like the best way to handle the issue with the only user impact being a briefly disabled font chooser.

That said I could totally see tangled balls of mud and spaghetti like Photoshop requiring synchronous font caching to function.

Perhaps they should consider saving that font cache to the disk so you only need to add new fonts to it on startup.
Again, that's application specific implementation details and not a Windows problem.
Windows could provide an API that has a font cache, which other programs can use to quickly get all fonts if they need to.

Linux for example has fontconfig with a metadata cache "fc-cache" https://man.archlinux.org/man/fc-cache.1.en

Windows has a Font Cache service that runs in the background so I would imagine they do. I'm not a Desktop Developer so I'm not all that familiar with the Windows API. But like any system, just because a convenient API exists that doesn't mean developers know about or use it. Especially with cross platform solutions, developers will opt not to use a particular API because it complicates things.

My guess is that these are poorly optimized Apps and the blogger is blaming the OS for their offenses.

900 fonts doesn't sound like a lot to do any kind of processing on - certainly not anything that should drive you berserk and spend man-weeks debugging and working around. So that suggests there's something 'accidentally quadratic' going on.
Fonts are not trivial to parse; 900 fonts also isn't a lot in a professional environment. If you're looking at every font every app launch it's definitely a problem in itself.
If you have lots of fonts I recommend a font manager. FontBase is free and a great app. Instead of installing your fonts you just activate them in FontBase when you want them. Most professional programs will recognise them immediately without needing a restart.
Working at a sign shop out of college in the 2000's, Corel Draw, Photoshop, or Illustrator would take enormous amounts of time to start.

After a while, I used a font utility to selectively choose which fonts to load up and hide the rest from the OS. I would have thought MS would have fixed this by now.

This isn't a Windows problem. This is an app problem, and in this post's case, Quicken. Quicken is looking to where Windows keeps fonts and, on every startup, accessing all of them.

Windows doesn't tell the app to do this, the app is choosing to do so. And if not fonts, it could be something else. (I've seen a homegrown enterprise app that would go weird if there was too much stuff in C:\Temp because it used it and scanned the WHOLE THING on startup for its stuff. Again, even though C:\Temp is a Windows folder, this is an app issue.)

“In Windows 10” lol Go ask your favorite graphic designer if this sounds familiar regardless of OS platform or version.
(comment deleted)
Ah, the problems of Mac users in the 90s, biting us fresh on the ass today! Didn't products like Extensis Suitcase help with issues like this?
How do people still use Windows?

Windows 7 was great, but after that it felt like someone scraped together bloat, telemetry and spyware and called it "Windows".

Just tells you how much the freedom to do anything you want (in a non-convulted way) is worth.
A lot of apps run only on Windows (and maybe Mac if you are lucky).
I use Windows every day at home and work. It’s far from perfect.

Linux, in my personal experience, requires faaaaaaar more debugging and tinkering and configuring. A full order of magnitude more time spent at least. This time is reduced if you’ve been using and configuring Linux boxes for 20 years. YMMV.

Now if you want to configure every little thing maybe that’s a good thing. If you want your computer to work consistently and without tinkering it’s maybe a bad thing.

And Windows + Visual Studio is still the best debugging experience for native code.

I have never heard anyone say anything good about the Visual Studio debugger before. Now, I'm not a Windows person but I'm not gonna argue for gdb or lldb here. RemedyBG and x64dbg are the two debuggers I've heard good things about though I've never used them because, again, not a Windows person.

[1] https://remedybg.handmade.network/

[2] https://x64dbg.com/

I've been using Linux for around 20 years, but I hate configuring things these days. It's possible to buy machines that require zero configuration on the user's part; most of my thinkpads over the past 5 or 7 years didn't need an iota of configuration
From my perspective, Linux works wonderfully when everything runs smoothly, especially for desktop use. However, when issues arise, I often find myself delving into extensive documentation. I frequently encounter minor usability issues, which might be amplified for me since I use Japanese input, which has its quirks. Additionally, I've faced more significant problems with nearly every major upgrade.

While Windows isn't without its flaws and has had its share of problematic updates, it generally feels more stable during routine updates compared to Linux.

Linux does offer better recovery options when things go awry. In contrast, troubleshooting on Windows can be challenging. Nonetheless, I find the recent versions of Windows to be more user-friendly than Linux desktops. Plus, with the addition of WSL, I can run Linux applications — including those with a GUI — when needed.

Given that Windows 3.1 and Windows 95 suffered from this exact problem, I doubt that Windows 7 was some Utopia where it briefly disappeared.
I quite like Win10 actually. It was what got me to finally switch off 7.

11 I hated, until it fixed its weird breakages and compatibility issues. And of course after switching everything around to look and function just like 10.

But Windows apps (let's be clear this is more an app problem than an OS problem) are filled with dumb shit like this. I have had many app performance issues where ProcMon shows a high number of IO operations against files, folders, registry, etc. Part of this is due to Windows Installer advertisement, which can inject this behavior into an application!

https://learn.microsoft.com/en-us/windows/win32/msi/platform...

(How does this happen? When an advertised entrypoint is invoked - shortcut, COM interface, file extension association, a few other things), there's 'Darwin Code' injected into the registry which causes an evaluation of *.msi packages installed which have that advertised entrypoint registered. It checks to see if any components are broken by checking the keypaths (keypaths could be files, folders, registry entries).

If you have an application invoking COM Interfaces many times a second, it's going to inject a bunch of IO ops to each time check all the components installed. I've seen apps when repackaged from an *.exe install into an *.msi slow down to a crawl (until you rebuild them with self-registration instead of using the MSI advertised tables).

It's also because Windows after 8ish seem to just assume everyone has an SSD and small file ops are "fast enough" to not care about and sure just throw blocking IO into the hot loop nobody cares. NTFS isn't even fast on many small file IOPs but MS don't care, because all their machines have big SSDs and they fired their QA anyway.

What are you going to do, install linux? Then you get to enjoy your package manager deleting your windowing environment when you try to install Steam because of some stupid overlooked thing. You can't even click a single button to roll back your install to a previous known good condition, like Windows has had since like 2000.

> It's also because Windows after 8ish seem to just assume everyone has an SSD and small file ops are "fast enough" to not care about and sure just throw blocking IO into the hot loop nobody cares.

I haven't had this issue, strangely. These days all my OS's are on SSD's though. But that was not the case when I first moved over to Win10 for my gaming PC and work both.

The shenanigans with windows updates though... I am convinced that there's something in the OS to intentionally cause strange behavior when updates are pending as a way of incentivizing you to reboot. This didn't used to happen. I haven't yet made the time to properly study it, because it's always at a moment where I have more important things to do.

> You can't even click a single button to roll back your install to a previous known good condition, like Windows has had since like 2000.

You can, just use an immutable distro like Fedora Silverblue.

Well, I just use it and that's it. I need it for my multiplayer games for their anti-cheat. I also make compromises in other areas of life.
For starters, this has nothing to do with Windows. Windows 10 and 11 are both objectively better than 7. Even Mac people clamor for certain older versions of MacOS, but if they were actually forced to go back would immediately balk.
An operating system is a means to run useful programs. It's not a goal.
Fontconfig in Linux (and maybe in everything that uses it) lets you do some cool things as disabling fonts, rather than uninstall them. I found this trick somewhere several years ago (and shared it the other day on reddit) but am still using against the Noto font family that is required by some programs, so they won't show up nor clog the font selection dialogs.

Just putting something like

<?xml version='1.0'?> <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'> <selectfont> <rejectfont> <glob>/usr/share/fonts/noto/*</glob> </rejectfont> </selectfont>

in any new file under /etc/fonts/conf.d/ will do the trick.

I'm curious, why do you block the Noto fonts?
(comment deleted)
I'd fully believe you if you said that an inopportune moon phase can cause something in Windows. Or my cat passing my desk in opposition to the Earth's magnetic field. I don't want to know what happens when both coincide.
There's the thing where you can make certain monitors lose the signal by sitting down on certain gas lift chairs with unshielded hdmi or dp cables.
Which has zero to do with Windows? Yeah, Windows is also vulnerable to being smashed with a hammer, stupid microsoft.
Yeah best way to solve this issue is to install linux. It's simply amazing how stable it is, and well suited for desktop use. If you absolutely must use windows, then install it inside a VM for office tools. Can't believe how much better the UI looks in linux (kde in my case, but so do other WMs), stable the overall system is, and how good it feels to finally not pay a corporation to spy on me.
there are things called applications people use to do stuff... many of which are not available on linux
and one of those applications that isn't available for linux is quicken.

if you're having a problem with an app, switching to an operating system that doesn't support that app at all is certainly one way to solve it.

Interesting, two people raising issues with quicken in the same thread. What are the odds. If you absolutely must run that app then use windows for that app. No one’s saying you shouldnt use the best tool for the task at hand, quite the contrary. Although i am curious if quicken would run well in wine. It would def run well inside a vm.
>two people raising issues with quicken in the same thread. What are the odds

pretty good odds, in the discussion for an article about quicken...

I have done this on Linux where my different WINE prefixes (like the ones managed by Bottles) can have different configurations. My gaming profile for example has none of the libraries or fonts needed to run Photoshop, etc.
Linux DISTRIBUTIONS have their own set of problems. There are a lot of reasons to run Windows that aren't games. For example, the level of support you get for server-based stuff is very nice as a corporation. It's also more consistent. No, I don't mean "correct" all the time. I mean with Windows things fail consistently (well...except for drivers) and things work consistently. It's far more polished.

As a Linux daily driver it's not hard to see the benefits of Windows over a popular Linux distribution. You may be able to close the gap with a (rather expensive) support contract but at that point you also may have been better off with Windows. Using a Linux distribution is often a time commitment and change of philosophy. I, like you, are willing to make the trade.

I notice this opinion (that Windows is terrible) to be particularly pervasive among the tech literate but inexperienced. There is an entire contingent of the US alone (probably 80%) that is completely and fully served by a simple, easy to manage, easy to use Windows installation. If you've never tried to get your parents to use Linux even Ubuntu is often asking too much (though its getting better). That's not their fault. Once again, switching to the Linux Way (TM) is a lifestyle. Just your example alone (the UI is cleaner) can diverge into something almost worth an entire collegiate degree. It's only recently with snaps that Ubuntu and Co. have approached a degree of usability that might constitute 0.5% or less more uptake.

Perhaps for your use case Windows sucks. But having recently ported off Ubuntu LTS to the latest and greatest I can tell you that it was miserable. There's nothing quite like repeatedly crashing to a tty and having to parse boot logs to figure out what screwed up. It's a suffering I am willing to do both for the philosophy of Linux and the benefits I get. The further away from "consumer" Linux distributions you get the graph of difficulty goes hockey-stick real fast.

Let's not pretend Windows is useless spyware. It is nasty stuff for privacy but it is certainly not pointless.

Using windows for servers is plain wrong and usually reserved for the inexperienced, and you stating the opposite is just a projection. The only issue in linux is with proprietary software that microsoft intentionally limits to its own os.
Lol, I put Windows Server 2012 on an old laptop over a decade ago and basically never had to touch it until it goes EOL soon. Remote management was RDP.

Windows Server is great if you don't want a second job as a SysAdmin

>The only issue in linux is with proprietary software that microsoft intentionally limits to its own os.

Ah yes, quicken is Windows only because Microsoft is paying them under the table, and has nothing to do with the six users you will have on a linux system bitching and moaning about every product decision you have made because it doesn't work in their extremely niche windowing manager that they swear by because they want to look like a hollywood hacker. Meanwhile the only stable API on linux for enterprise software is Win32, because expecting every user who's just trying to do their damn job learn how to administrate a Linux system that still pretends we live in the 60s and text only terminals are the way of the future is absurd.

I would like some brave soul, a Lennart Pöttering's spiritual successor of sorts, to write a drop-in, ABI-compatible replacement for fontconfig/libfontconfig, maybe some kind of a "fontd", that would enumerate fonts in the system once (maybe per login) and applications wouldn't have to reinitialize all the crap all over again each time they start, but instead connect over a socket and get the information from a centralized place.

It would also solve the problem that half of your applications need to be restarted whenever you install a new font, or they just won't see it appear. And where they have hacks implemented to overcome that, that every bloody application has to query available fonts again, which makes it quite tedious for the system once you have lots of fonts and lots of applications open, even if your machine is beefy enough.

It wouldn't solve a problem of pathetic whiners who desperately cling to the old ways who will come in droves to complain on HN and LWN, but then again, nothing is ever new under the sun.

>It wouldn't solve a problem of pathetic whiners who desperately cling to the old ways who will come in droves to complain on HN and LWN, but then again, nothing is ever new under the sun.

Thank you for this cue.

I doubt it would be a library, maybe 5 different daemons working together to complicate things.

I truly don't understand why anyone would write a program that needs to read any font in your system other than the one(s) it actually uses. The number of times I've stared in utter fucking bewilderment as VLC or some other video program churns for a full minute over what cannot be more than a few megabytes of data to build a font cache is outrageous.
The title is a bit misleading; Windows had nothing to do with this. This is just an application (Quicken) doing a slow thing at startup getting slower when the number of things that it does the thing on increases. That's just a slow app.

An app should never go over all fonts on a system in a blocking fashion.

The number of fonts on the system should never affect app performance.

>Windows had nothing to do with this.

But then how would the title clickbait itself to the top of HN?

And Quicken is not even sold or developed by Microsoft!

Implying blame on Windows become of some random third parties making bozo decisions is just bizarre writing.

(comment deleted)
This is not a Windows problem, this is an application problem, specifically Quicken. The software is likely pre-rendering all the font previews so the dropdown that shows the fonts opens instantly. This is probably something that Quicken has done for decades and no one thought 'hey, no one changes fonts, this is pointless to do on startup'.
This was absolutely an issue back as far as XP with apps like 3D Studio Max. I remember starting to use Font management software to keep the installed system lean and manageable.

I’m also talking about a few thousand font types/variants. I did typesetting and required many for compatibility with ingesting content.

Came here to say this. Maybe even 98 or ME... having lots of fonts installed really stalled a lot of UI interactions...
ah I love it when people complain about windows when the problem is actually their specific use.

Windows implements many stupid ideas, don't get me wrong. it is not a perfect OS.

every day at work I help people with problems on Windows and in about 19/20 cases the cause is self-inflicted. the things they used to do in Windows XP or Windows 7 just don't work the same way anymore, and often cause problems.

but they just say "Windows sucks" anyway and no one challenges what they're doing until they come needing help with something.

So run quicken in a sandbox vm with only the standard system fonts installed