Introducció
Tree Shaking és una tècnica d'optimització que permet eliminar codi mort (unused code) de les aplicacions JavaScript durant el procés de construcció. Aquesta tècnica és especialment útil per reduir la mida dels paquets finals, millorant així el rendiment de les aplicacions.
Conceptes Clau
- Codi Mort (Unused Code): Codi que no s'utilitza en cap lloc de l'aplicació.
- ES6 Modules: Tree Shaking funciona millor amb els mòduls ES6 (
import
iexport
), ja que aquests permeten una anàlisi estàtica del codi. - Side Effects: Operacions dins dels mòduls que poden tenir efectes col·laterals, com modificar variables globals o executar codi en importar el mòdul.
Configuració de Tree Shaking a Webpack
- Utilitzar Mòduls ES6
Assegura't que el teu codi utilitzi mòduls ES6. Per exemple:
// utils.js export function add(a, b) { return a + b; } export function subtract(a, b) { return a - b; } // main.js import { add } from './utils'; console.log(add(2, 3));
- Configurar Webpack
Per habilitar Tree Shaking a Webpack, assegura't que el mode estigui configurat a production
. Això activa automàticament diverses optimitzacions, incloent Tree Shaking.
// webpack.config.js module.exports = { mode: 'production', entry: './src/main.js', output: { filename: 'bundle.js', path: __dirname + '/dist' } };
- Marcar Mòduls amb Side Effects
Si tens mòduls que tenen efectes col·laterals, has de marcar-los explícitament per evitar que Webpack els elimini. Això es fa al fitxer package.json
:
{ "name": "my-project", "version": "1.0.0", "sideEffects": [ "./src/some-module-with-side-effects.js" ] }
Si tots els teus mòduls són lliures d'efectes col·laterals, pots establir sideEffects
a false
:
Exemple Pràctic
Estructura del Projecte
Contingut dels Fitxers
utils.js
main.js
webpack.config.js
const path = require('path'); module.exports = { mode: 'production', entry: './src/main.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') } };
package.json
{ "name": "tree-shaking-example", "version": "1.0.0", "main": "index.js", "sideEffects": false, "scripts": { "build": "webpack" }, "devDependencies": { "webpack": "^5.0.0", "webpack-cli": "^4.0.0" } }
Construcció del Projecte
Executa la comanda de construcció:
Després de la construcció, el fitxer bundle.js
només contindrà el codi de la funció add
, ja que subtract
no s'utilitza enlloc.
Exercicis Pràctics
Exercici 1
Descripció: Crea un projecte Webpack que utilitzi Tree Shaking per eliminar codi mort.
Passos:
- Crea un fitxer
math.js
amb diverses funcions matemàtiques. - Importa només una de les funcions en un fitxer
index.js
. - Configura Webpack per a la construcció en mode
production
. - Verifica que el codi mort s'ha eliminat del paquet final.
Solució:
math.js
export function add(a, b) { return a + b; } export function subtract(a, b) { return a - b; } export function multiply(a, b) { return a * b; }
index.js
webpack.config.js
const path = require('path'); module.exports = { mode: 'production', entry: './src/index.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') } };
package.json
{ "name": "tree-shaking-exercise", "version": "1.0.0", "main": "index.js", "sideEffects": false, "scripts": { "build": "webpack" }, "devDependencies": { "webpack": "^5.0.0", "webpack-cli": "^4.0.0" } }
Executa npm run build
i verifica que només la funció add
està present en el fitxer bundle.js
.
Conclusió
Tree Shaking és una tècnica poderosa per optimitzar les aplicacions JavaScript eliminant codi mort. Utilitzant mòduls ES6 i configurant correctament Webpack, pots reduir significativament la mida dels teus paquets finals, millorant així el rendiment de les teves aplicacions.
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