En aquest tema, explorarem com gestionar la memòria cau (caché) en Webpack per millorar el rendiment de les aplicacions web. La memòria cau és una tècnica que permet emmagatzemar dades temporalment per accelerar l'accés futur a aquestes dades. En el context de Webpack, la memòria cau ajuda a evitar la recàrrega innecessària de fitxers que no han canviat, millorant així el temps de càrrega de les aplicacions.
Objectius
- Entendre la importància de la memòria cau en el desenvolupament web.
- Aprendre a configurar la memòria cau en Webpack.
- Implementar tècniques de memòria cau per a fitxers JavaScript, CSS i altres recursos.
Conceptes Clau
- Importància de la Memòria Cau
- Rendiment: Redueix el temps de càrrega de les pàgines web.
- Eficiència: Minimitza les sol·licituds al servidor.
- Experiència d'Usuari: Millora la percepció de velocitat de l'aplicació.
- Hashing de Fitxers
El hashing de fitxers és una tècnica que afegeix un hash únic als noms dels fitxers generats per Webpack. Això permet que els navegadors puguin identificar fàcilment si un fitxer ha canviat i, per tant, si cal descarregar-lo de nou.
- Tipus de Hashing
- Hash de Contingut (
[contenthash]
): Basat en el contingut del fitxer. Canvia només si el contingut del fitxer canvia. - Hash de Mòdul (
[chunkhash]
): Basat en el contingut del mòdul. Canvia només si el contingut del mòdul canvia. - Hash de Compilació (
[hash]
): Basat en la compilació completa. Canvia cada vegada que es fa una nova compilació.
Configuració de la Memòria Cau en Webpack
- Configuració Bàsica
A continuació, es mostra un exemple de configuració bàsica de Webpack per utilitzar el hashing de fitxers:
const path = require('path'); module.exports = { entry: './src/index.js', output: { filename: '[name].[contenthash].js', path: path.resolve(__dirname, 'dist'), clean: true, // Neteja la carpeta de sortida abans de cada compilació }, module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'], }, ], }, optimization: { moduleIds: 'deterministic', // Assegura que els IDs de mòdul siguin estables runtimeChunk: 'single', // Crea un chunk separat per al runtime splitChunks: { chunks: 'all', // Divideix els chunks per a tots els mòduls }, }, };
- Explicació del Codi
filename: '[name].[contenthash].js'
: Utilitza el hash de contingut per als noms dels fitxers de sortida.clean: true
: Neteja la carpeta de sortida abans de cada compilació per evitar fitxers obsolets.moduleIds: 'deterministic'
: Garanteix que els IDs de mòdul siguin estables entre compilacions.runtimeChunk: 'single'
: Crea un chunk separat per al runtime, millorant la memòria cau.splitChunks: { chunks: 'all' }
: Divideix els chunks per a tots els mòduls, millorant la memòria cau i el rendiment.
- Plugins per a la Memòria Cau
HtmlWebpackPlugin
: Genera un fitxer HTML que inclou automàticament els fitxers de sortida amb hash.WebpackManifestPlugin
: Crea un manifest JSON que mapeja els noms dels fitxers originals als noms amb hash.
Exemple d'ús de HtmlWebpackPlugin
:
const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { // ... altres configuracions plugins: [ new HtmlWebpackPlugin({ template: './src/index.html', }), ], };
Exercicis Pràctics
Exercici 1: Configuració de Hashing de Fitxers
- Configura un projecte Webpack per utilitzar el hashing de fitxers amb
[contenthash]
. - Afegeix un fitxer CSS i assegura't que també utilitzi el hashing de fitxers.
Solució:
const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { filename: '[name].[contenthash].js', path: path.resolve(__dirname, 'dist'), clean: true, }, module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'], }, ], }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html', }), ], optimization: { moduleIds: 'deterministic', runtimeChunk: 'single', splitChunks: { chunks: 'all', }, }, };
Exercici 2: Implementació de WebpackManifestPlugin
- Afegeix el
WebpackManifestPlugin
al projecte per generar un manifest JSON. - Verifica que el manifest JSON es generi correctament i mapeja els noms dels fitxers originals als noms amb hash.
Solució:
const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const { WebpackManifestPlugin } = require('webpack-manifest-plugin'); module.exports = { entry: './src/index.js', output: { filename: '[name].[contenthash].js', path: path.resolve(__dirname, 'dist'), clean: true, }, module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'], }, ], }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html', }), new WebpackManifestPlugin(), ], optimization: { moduleIds: 'deterministic', runtimeChunk: 'single', splitChunks: { chunks: 'all', }, }, };
Resum
En aquest tema, hem après la importància de la memòria cau en el desenvolupament web i com configurar-la en Webpack utilitzant tècniques de hashing de fitxers. També hem vist com utilitzar plugins com HtmlWebpackPlugin
i WebpackManifestPlugin
per millorar la gestió de la memòria cau. Aquestes tècniques són essencials per optimitzar el rendiment de les aplicacions web i proporcionar una millor experiència d'usuari.
Curs de Webpack
Mòdul 1: Introducció a Webpack
- Què és Webpack?
- Configuració de Webpack
- Fitxer de Configuració de Webpack
- Construcció Bàsica amb Webpack
Mòdul 2: Conceptes Bàsics
Mòdul 3: Configuració Avançada
Mòdul 4: Eines de Desenvolupament
Mòdul 5: Optimització per a Producció
Mòdul 6: Integracions i Tècniques Avançades
- Integració amb Babel
- Integració amb TypeScript
- Ús de Webpack amb React
- Ús de Webpack amb Vue
- Plugins i Loaders Personalitzats
Mòdul 7: Projectes del Món Real
- Configuració d'un Projecte React
- Configuració d'un Projecte Vue
- Configuració d'un Projecte Node.js
- Migració de Projectes Heretats a Webpack