Minificare JSON
Toglie ogni byte di spazio bianco e mostra esattamente quanto hai risparmiato.
Nulla di ciò che incolli lascia il tuo browser. L’allowlist connect-src ne fa una garanzia del browser anziché una promessa. Verificalo tu stesso
Minificare toglie ogni byte di spazio bianco che un parser ignora: gli a capo, l’indentazione, lo spazio dopo ogni due punti. Non cambia nient’altro, e il risultato analizzato è identico.
Su un payload di API formattato tipico questo toglie tra il 10 e il 20 per cento dei byte. Su un documento molto annidato formattato con quattro spazi può superare un terzo.
Dove serve davvero e dove no
Minificare conviene per tutto ciò che viene archiviato o trasmesso in quantità: risposte di API, configurazione inclusa in un bundle, messaggi in coda, righe in uno storage a colonne.
Su HTTP conviene molto meno di quanto si creda, perché gzip e brotli comprimono già benissimo lo spazio bianco ripetuto. Minificare una risposta già compressa con gzip fa risparmiare qualche punto percentuale, non venti. Dove conta ancora è ovunque non ci sia compressione: storage locale, una colonna di database, il corpo di un messaggio con un limite di dimensione rigido, o una riga di log.
Non conviene affatto per un file che legge una persona. Il JSON minificato è un’unica riga enorme, e ogni diff su di essa è una riscrittura dell’intero file.
Che cosa la minificazione non fa
Non accorcia le chiavi, non elimina i valori null, non riordina nulla e non tocca i numeri. Sono trasformazioni dei tuoi dati, non della loro formattazione, e un minificatore che le facesse in silenzio sarebbe pericoloso.
In particolare, i numeri conservano il testo esatto. Un minificatore costruito su JSON.parse trasformerebbe 1.50 in 1.5 e 1e3 in 1000: più piccolo, ma anche un documento diverso.
How to do this in code
Minificare nel codice.
js JavaScript
const min = JSON.stringify(JSON.parse(text));
// Note this also normalises numbers: 1.50 becomes 1.5. py Python
json.dumps usa ", " e ": " come separatori predefiniti, quindi la chiamata ingenua non è affatto minificata.
import json
# The separators argument is the part people miss: without it
# Python leaves a space after every comma and colon.
min_text = json.dumps(json.loads(text), separators=(',', ':')) sh jq
jq -c . input.json > output.min.json go Go
var buf bytes.Buffer
if err := json.Compact(&buf, data); err != nil {
return err
}
// Compact works on bytes, so numbers are untouched. Domande frequenti
- Quanto risparmierò davvero?
- Lo strumento mostra il conteggio dei byte prima e dopo per il tuo documento specifico. Come regola generale, il JSON formattato con due spazi è per il 10-20 per cento spazio bianco, con quattro spazi di più. Su una connessione con gzip il risparmio reale è molto minore, perché la compressione gestisce già bene le ripetizioni.
- Il JSON minificato è ancora valido?
- Sì. Lo spazio bianco tra i token non è significativo, quindi un documento minificato e uno formattato si analizzano esattamente nello stesso valore.
- Dovrei minificare il JSON nel mio repository?
- No. Il controllo di versione serve a far leggere i diff alle persone, e un file minificato fa sembrare ogni modifica una riscrittura completa. Minifica al momento della build o dell’invio.