Introducció
El rendiment web continua sent un factor crític per a l'èxit de qualsevol projecte digital. El 2025, les exigències de velocitat, eficiència i accessibilitat han assolit nous nivells, impulsades per l'evolució de les mètriques, l'augment de l'ús mòbil i la major consciència sobre la sostenibilitat digital.
"L'optimització de rendiment no és un esforç puntual, sinó un procés continu que requereix atenció constant i adaptació a les noves tecnologies i expectatives dels usuaris."
Core Web Vitals: Les noves mètriques clau
El 2025, Google ha actualitzat les seves mètriques Core Web Vitals, afegint noves dimensions al rendiment web:
- LCP (Largest Contentful Paint): ≤ 2.0s per considerar-se bo
- Mesura el temps en què es renderitza l'element de contingut més gran
- - Optimitza amb estratègies eficients d'imatges, CSS crític i precàrrega
- INP (Interaction to Next Paint): ≤ 100ms per considerar-se bo
- Va reemplaçar el FID, mesura el temps de resposta a la interacció de l'usuari
- - Optimitza dividint tasques llargues i utilitzant Web Workers
- CLS (Cumulative Layout Shift): ≤ 0.1 per considerar-se bo
- Mesura l'estabilitat visual durant la càrrega
- - Optimitza especificant dimensions d'elements i reservant espai
- EEI (Energy Efficiency Index): ≤ 25 per considerar-se bo
- Nova el 2025, avalua el consum energètic del lloc web
- - Optimitza reduint animacions, implementant throttling i optimitzant JavaScript
Nota: Segons estudis recents, un 50% dels usuaris abandonen un lloc web si triga més de 3 segons a carregar, i Google penalitza cada vegada més el rendiment deficient en els seus resultats de cerca.
Estratègies de càrrega i renderitzat
La forma en què carreguem i renderitzem contingut ha evolucionat significativament. Aquestes són les estratègies més efectives el 2025:
Streaming SSR i Renderitzat Progressiu
El Streaming Server-Side Rendering permet enviar parts de la pàgina al navegador tan aviat com estiguin llestes:
// server.js (Node.js)
import { renderToStream } from 'react-dom/server';
import App from './App';
app.get('/', (req, res) => { // Configurar headers per a streaming res.setHeader('Content-Type', 'text/html'); res.setHeader('Transfer-Encoding', 'chunked');
// Iniciar stream amb l'HTML inicial
res.write(...
);
// Stream del component React
const stream = renderToStream(
// Quan l'stream acabi, tancar l'HTML
stream.on('end', () => {
res.write(