DEV Community

Samuel Lubliner
Samuel Lubliner

Posted on • Updated on

Optimizing Fonts and Images (Next.js)

Using custom fonts in your project can affect performance if the font files need to be fetched and loaded.

Cumulative Layout Shift is used to evaluate the performance and of a website.

Next.js automatically optimizes fonts in the application when you use the next/font module. It downloads font files at build time and hosts them with your other static assets. When a user visits your application, there are no additional network requests for fonts.

View my commits on GitHub:

Adding a primary font

Use /app/ui/fonts.ts to keep the fonts that will be used throughout your application.

Adding Inter to the <body> element, applies the font throughout. The Tailwind antialiased class smooths out the font.

Adding a secondary font

If you're unsure what weight options to pass to a font, check the TypeScript errors in your code editor.

Visit Google Fonts and search for Lusitana to see what options are available.

See the documentation for adding multiple fonts and the full list of options.

Optimize Images

Next.js can serve static assets, like images, under the top-level /public folder. Files inside /public can be referenced in your application.

With regular HTML, you manually:

  • Ensure your image is responsive on different screen sizes.
  • Specify image sizes for different devices.
  • Prevent layout shift as the images load.
  • Lazy load images that are outside the user's viewport.

The next/image component automatically optimizes your images. The <Image> Component is an extension of the HTML <img> tag, and comes with automatic image optimization, such as:

  • Preventing layout shift automatically when images are loading.
  • Resizing images to avoid shipping large images to devices with a smaller viewport.
  • Lazy loading images by default (images load as they enter the viewport).
  • Serving images in modern formats, like WebP and AVIF, when the browser supports it.

Good practice:

  • Set the width and height of your images to avoid layout shift
  • Aspect ratio identical to the source image.

Dive deeper into fonts and images:

https://nextjs.org/docs/app/building-your-application/optimizing/images

https://nextjs.org/docs/app/building-your-application/optimizing/fonts

https://developer.mozilla.org/en-US/docs/Learn/Performance/Multimedia

https://developer.mozilla.org/en-US/docs/Learn/CSS/Styling_text/Web_fonts

Top comments (0)