[Medium] Vue3 Static Hoisting
1. Cos'è lo Static Hoisting in Vue 3?
Spiega lo static hoisting in Vue 3.
In Vue 3, lo static hoisting è un'ottimizzazione a tempo di compilazione.
Definizione
Durante la compilazione del template, Vue analizza quali nodi sono completamente statici (nessuna dipendenza reattiva). Quei nodi statici vengono sollevati (hoisted) in costanti a livello di modulo e creati una sola volta. Nei successivi re-render, Vue li riutilizza invece di ricrearli e confrontarli.
Come funziona
Il compilatore analizza l'AST del template e solleva i sotto-alberi che non cambiano mai. Solo le parti dinamiche vengono rigenerate durante gli aggiornamenti.
Esempio prima/dopo
Template prima della compilazione:
<template>
<div>
<h1>Titolo statico</h1>
<p>Contenuto statico</p>
<div>{{ dynamicContent }}</div>
</div>
</template>
JavaScript compilato (semplificato):
// nodi statici sollevati una sola volta
const _hoisted_1 = /*#__PURE__*/ h('h1', null, 'Titolo statico');
const _hoisted_2 = /*#__PURE__*/ h('p', null, 'Contenuto statico');
function render() {
return h('div', null, [
_hoisted_1, // riutilizzato
_hoisted_2, // riutilizzato
h('div', null, dynamicContent.value), // dinamico
]);
}
Vantaggi
- Costo inferiore di creazione VNode
- Meno lavoro di diff
- Migliori prestazioni di rendering
- Ottimizzazione automatica (nessun codice aggiuntivo richiesto)
2. Come Funziona lo Static Hoisting
Come opera internamente lo static hoisting?
Flusso del compilatore
- Rilevamento dei binding dinamici
{{ }},v-bind,v-if,v-for, props dinamiche, ecc.
- Marcatura dei nodi statici
- Nodo e figli sono statici -> candidato per l'hoisting
- Sollevamento dei nodi statici
- Spostamento dei nodi/costanti statici fuori da
render()
- Spostamento dei nodi/costanti statici fuori da