When it comes to improving website performance, every millisecond matters. One of the most effective ways to reduce loading times for critical resources is to use the HTML link rel="preload" attribute. In this post, we’ll dive into how preloading works, when to use it, and how it can drastically improve the user experience on your website.
What is rel="preload"?
The rel="preload" attribute allows you to tell the browser to start downloading certain resources before they are needed during page rendering. By doing this, you can ensure that key assets like fonts, stylesheets, or scripts are fetched sooner, reducing the time it takes for the page to fully render.
In simpler terms, you're giving the browser a heads-up on which files are important for a smooth experience.
Why Should You Use Preload?
Most web performance optimizations focus on reducing the time it takes to load resources. Preload is especially useful when there are critical assets like fonts, CSS, or JavaScript files that directly impact how quickly your page displays and functions.
Here’s how preload can help:
- Reduce Render Blocking: By preloading critical CSS or fonts, you avoid render-blocking issues where the page waits to load these resources before displaying content.
- Improve First Contentful Paint (FCP): Preloading ensures that important resources are downloaded faster, improving the speed at which the first visual content appears to users.
- Better User Experience: A faster-loading page feels more responsive and enhances the overall user experience, especially for resource-heavy assets like fonts or hero images.
Syntax and Usage
Let’s start with a basic example of how to use rel="preload". Below is a simple HTML snippet that demonstrates preloading a custom font:
<link rel="preload" href="/fonts/MyFont.woff2" as="font" type="font/woff2" crossorigin="anonymous">
In this example:
- hrefspecifies the URL of the resource.
- as indicates the type of resource (e.g., font, image, script).
- type helps the browser understand the exact format of the file (useful for fonts).
- crossorigin is required when loading resources from a different domain. The browser sees this tag and knows to download the font early, even if the CSS that uses the font hasn’t been applied yet.
Preloading Different Types of Resources
You can preload various types of resources that are critical for rendering your page. Let’s take a look at some common examples:
1. Preload Fonts
Fonts are often a major cause of slow initial page loads. Preloading them ensures that text is styled correctly as soon as the content is rendered, preventing Flash of Unstyled Text (FOUT) or Flash of Invisible Text (FOIT).
<link rel="preload" href="/fonts/OpenSans.woff2" as="font" type="font/woff2" crossorigin="anonymous">
2. Preload Stylesheets
Critical stylesheets that control the layout of your page should be preloaded to ensure that the browser renders the page as quickly as possible.
<link rel="preload" href="/css/main.css" as="style">
3. Preload Scripts
If you have JavaScript that’s required immediately for user interaction, preloading it can help reduce the delay in script execution.
<link rel="preload" href="/scripts/main.js" as="script">
4. Preload Images
Large images, especially those used above the fold, should be preloaded to ensure that users don’t see blank spaces or image placeholders while the image is being fetched.
<link rel="preload" href="/images/hero.jpg" as="image">
Best Practices for Using rel="preload"
Although preload is a powerful tool, you should use it thoughtfully. Here are a few best practices:
Only Preload Critical Resources: Preloading everything can actually slow down your site. Stick to the resources that are essential for the initial page rendering.
Use crossorigin for External Resources: When preloading resources from a different domain, be sure to include the crossorigin attribute. This ensures that your resource can be fetched correctly without CORS issues.
Ensure Proper Cache Handling: Preloaded resources should be cacheable to prevent redundant network requests. This reduces the load on both your server and the user's browser.
Don't Preload Everything: Over-preloading can cause unnecessary strain on the browser, leading to performance degradation. Only preload assets that are essential for the critical rendering path.
Example of Using rel="preload" on Your Website
Here’s a full example of how you can integrate rel="preload" in a typical web page:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Preload Example</title>
<!-- Preload important resources -->
<link rel="preload" href="/fonts/OpenSans.woff2" as="font" type="font/woff2" crossorigin="anonymous">
<link rel="preload" href="/css/main.css" as="style">
<link rel="preload" href="/scripts/main.js" as="script">
<link rel="preload" href="/images/hero.jpg" as="image">
<!-- Link stylesheet -->
<link rel="stylesheet" href="/css/main.css">
</head>
<body>
<header>
<h1>Preload Example</h1>
<img src="/images/hero.jpg" alt="Hero Image">
</header>
<script src="/scripts/main.js"></script>
</body>
</html>
In this example, we’ve preloaded the essential assets that will immediately impact how fast the page renders, like fonts, stylesheets, and images.
When Not to Use rel="preload"
While preload is powerful, it’s not a magic solution for all resources. Here are a few cases where you might want to avoid using it:
Non-Critical Resources: Don’t preload assets that aren’t essential for the initial rendering of your page.
Unpredictable Resources: If certain assets are conditional or depend on user interaction (like below-the-fold images or deferred JavaScript), it’s best to let the browser fetch them when needed.
Conclusion
Using rel="preload" is a simple yet effective way to speed up your website by telling the browser to fetch critical resources as soon as possible. By focusing on preloading essential assets like fonts, stylesheets, and images, you can reduce load times and enhance user experience.
The key takeaway: preload only what’s critical, and your website’s performance will significantly improve. Give it a try on your next project and see the difference it makes!
Top comments (9)
For JavaScript files that are ECMAScript modules, there's the “modulepreload” value, which not only pre-loads the file, but also compiles it (without blocking the browser), which the “preload” value of the rel attribute doesn't do.
This is one of the reasons why today we prefer to systematically use ECMAScript modules. Especially as it is possible to use JavaScript libraries as ECMAScript modules.
Good explanation
Very good described. Compliments
Thank you very much
Nice! How do I prevent the double download when I use it?
By ensuring correct as attributes, using font-display for fonts, deferring JavaScript, and using crossorigin for external resources — you can preload resources without worrying about the browser downloading them twice.
With these techniques, you can make sure your users benefit from faster load times without any wasted network requests!
Your code above double loads the same css
You are right!
Article is kinda a few years late)
I'd say, it is time to forget rel="preload" and start switching to Speculation API
developer.mozilla.org/en-US/docs/W...
Some comments may only be visible to logged-in visitors. Sign in to view all comments.