Modern web applications no longer rely on a single huge JavaScript package. Research shows that larger packages increase memory usage and CPU load, especially on low- and mid-end mobile devices. Webpack provides multiple features to reduce package size and control resource loading priorities, the most important of which are code segmentation and performance hints. Code segmentation divides the code into multiple packages, loading on demand or in parallel; performance tips detect whether the package size exceeds the specified threshold when building, in order to optimize or delete unnecessary code.
Webpack By default, warnings are issued when the resource size or entry point exceeds 250KB (244KiB), but you can configure how and size thresholds of performance prompts are displayed via performance
object in the webpack.config.js
file. This article will describe how to use this feature as the first line of defense to prevent performance degradation.
Customize your budget
The default resource and entry point size thresholds may not always match your needs, but can be configured. For example, a small blog may have a budget of 50KB (48.8KiB) each of the resources and entry points. The relevant settings in webpack.config.js
are as follows:
module.exports = { performance: { maxAssetSize: 50000, maxEntrypointSize: 50000, } };
maxAssetSize
and maxEntrypointSize
properties control the threshold size (in bytes) of the resource and entry point, respectively. maxEntrypointSize
ensures that packages created from files listed in entry
object (usually JavaScript or Sass files) do not exceed the specified threshold; maxAssetSize
enforces the same restrictions on other resources generated by Webpack (such as images, fonts, etc.).
An error appears when the threshold is exceeded
Webpack issues a warning when the budget threshold is exceeded by default. This is enough for the development environment, but not for the production environment. You can trigger an error by adding hints
property to the performance
object and setting it to 'error'
:
module.exports = { performance: { maxAssetSize: 50000, maxEntrypointSize: 50000, hints: 'error', } };
Other valid values for hints
attribute are 'warning'
and false
. false
will completely disable the warning, even if the specified limit is exceeded. It is not recommended to use false
in production mode.
Exclude certain resources
Webpack enforces a size threshold for each type of resource it generates. If any resource exceeds the specified limit, an error will be thrown. For example, if Webpack is configured to process images, an error will occur as long as one of the images exceeds the threshold.
assetFilter
property can be used to control the files used to calculate performance prompts:
module.exports = { performance: { maxAssetSize: 50000, maxEntrypointSize: 50000, hints: 'error', assetFilter: function(assetFilename) { return !assetFilename.endsWith('.jpg'); }, } };
This tells Webpack to exclude any files ending in .jpg
when running performance prompt calculations. It can use more complex logic to meet the conditions of various environments, file types, and other resources.
limit
One current limitation is that the same budget threshold applies to all resources and entry points. In other words, multiple budgets are not yet set as needed, such as setting different restrictions for JavaScript, CSS, and image files. However, there are already open pull requests that should remove this restriction.
Summarize
It is useful to set up and enforce performance budgets at the beginning of the project. It will remind you to pay attention to the size of your dependencies and encourage you to find lighter alternatives to avoid over budget.
But the performance budget doesn’t stop there! Resource size is just one of many factors that affect performance, so more work is still needed to ensure the best experience is provided. Running Lighthouse tests is a great way to understand other metrics and suggestions for improvement.
The above is the detailed content of Enforcing performance budgets with webpack. For more information, please follow other related articles on the PHP Chinese website!

I got this question the other day. My first thought is: weird question! Specificity is about selectors, and at-rules are not selectors, so... irrelevant?

Yes, you can, and it doesn't really matter in what order. A CSS preprocessor is not required. It works in regular CSS.

You should for sure be setting far-out cache headers on your assets like CSS and JavaScript (and images and fonts and whatever else). That tells the browser

Many developers write about how to maintain a CSS codebase, yet not a lot of them write about how they measure the quality of that codebase. Sure, we have

Have you ever had a form that needed to accept a short, arbitrary bit of text? Like a name or whatever. That's exactly what is for. There are lots of

I'm so excited to be heading to Zürich, Switzerland for Front Conference (Love that name and URL!). I've never been to Switzerland before, so I'm excited

One of my favorite developments in software development has been the advent of serverless. As a developer who has a tendency to get bogged down in the details

In this post, we’ll be using an ecommerce store demo I built and deployed to Netlify to show how we can make dynamic routes for incoming data. It’s a fairly


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

Notepad++7.3.1
Easy-to-use and free code editor

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

Dreamweaver CS6
Visual web development tools