Font subset.
A font subset is a font file regenerated with only the characters that are needed.
A font file can carry thousands of characters by default: Latin, Cyrillic, Greek, Vietnamese and more. The set needed for Turkish, English and German is a small part of that — and the unnecessary ones are downloaded on every page, for every user.
Producing a subset removes that waste, and the gain is usually dramatic: it can come down to a small percentage of the full file. On multilingual sites this is the single biggest performance gain there is.
Which set is needed depends on the languages. Turkish requires Latin and Latin Extended — the extended set contains the dotless ı, the ğ and the ş. For German the umlauts and the eszett are in the same sets.
- Produce only the sets you need — do not let unused alphabets download.
- Use a variable font — one file instead of six files for six weights.
- Do not serve a separate file per language — for Latin-based languages a single file is more efficient.
- Host it yourself — an external host costs an extra connection and your privacy.
The third item carries a trade-off: once Cyrillic or Arabic is added the equation changes and a file per language becomes sensible. For three Latin-based languages, a single file means fewer requests.
On this site both typeface families are served as subsets of Latin and Latin Extended, in variable form and from our own domain.
Subset generation has to be automated: done by hand, the step is forgotten when the font is updated and the full file goes live. The defect is silent — the page keeps working, it just gets heavier.
The check is simple: look at the size of the font file in production. If it is many times what you expect, no subset was applied.
And a note on scope: a subset is not limited to the alphabet — punctuation, numerals, currency symbols and typographic marks have to be included too. An incomplete set means a character never appears at all.
- Produce only the alphabets you need — no Cyrillic, no Greek.
- Do not forget punctuation and symbols — an incomplete set shows no character at all.
- Use a variable font — one file carries every weight.
- Host it yourself — an external host costs an extra connection and your privacy.
- Verify the size — if it is many times what you expect, no subset was applied.