Subsetting Fonts for Performance
Present a method for subsetting fonts to include only the needed characters and glyphs, reducing file sizes for faster font loading in a Next.js project.
import { useEffect } from 'react';
import FontFaceObserver from 'fontfaceobserver';
// Load and observe the subset font
const useSubsetFont = (fontName, fontPath) => {
  useEffect(() => {
    const font = new FontFaceObserver(fontName);
    font.load().then(() => {
      document.documentElement.classList.add('fonts-loaded');
    }).catch((e) => {
      console.error('Font loading failed:', e);
    });
    const link = document.createElement('link');
    link.href = fontPath;
    link.rel = 'stylesheet';
    link.type = 'text/css';
    document.head.appendChild(link);
  }, [fontName, fontPath]);
};
export default useSubsetFont;This JavaScript code snippet defines a custom hook `useSubsetFont` which uses the FontFaceObserver library to load a subset of a web font asynchronously for performance. It appends the font stylesheet to the document head and adds a class to the document element once the font is loaded. It takes two parameters: `fontName`, the name of the font, and `fontPath`, the URL of the subset font's stylesheet. This hook can be used inside any component in a Next.js project.