← Torna alla Home

Dove vivono i dati?

Capire la differenza tra Server-Side e Client-Side e come funziona la nostra "App Locale".

1. Il Ristorante vs La Cucina di Casa

Il Web Classico (Server-Side) = RISTORANTE

Esempio: Instagram, Wikipedia.

Tu non vedi gli ingredienti grezzi, vedi solo il risultato finale.

La App Locale (Client-Side) = CUCINARE A CASA

Esempio: Il nostro file HTML/JS.


2. Il Server Passivo (Disco H:/)

Possiamo usare un disco esterno (o una chiavetta) per rendere tutto trasportabile. A differenza di un server vero (che "pensa"), il disco è un semplice magazzino ("stupido").

La differenza tecnica nei protocolli:

⚠️ Sicurezza: La "Scatola di Sabbia" (Sandbox)
Perché dobbiamo premere "Carica CSV" e non salva da solo?
Se un sito web potesse leggere/scrivere liberamente sul tuo disco H:, un virus potrebbe cancellare tutto in un secondo! Per questo il browser vive in una "scatola di sabbia" e non può toccare il disco senza il tuo permesso esplicito (il click).

3. Il "Cervello" del Browser (LocalStorage)

Se scriviamo un nome nella tabella e premiamo F5 (aggiorna), normalmente sparisce tutto (memoria volatile). Come risolviamo?

Usiamo il LocalStorage: è come un post-it incollato dentro il vetro del monitor. Anche se spegni il PC, il post-it resta lì.

Caratteristiche del LocalStorage:

4. Analisi del Codice: Liofilizzare i dati

Poiché il LocalStorage accetta solo testo, ma la nostra tabella è un oggetto complesso, dobbiamo trasformarla.

A. Il Salvataggio (Serializzazione)

Usiamo JSON.stringify per trasformare l'oggetto in testo ("liofilizzazione").

function saveData() {
    // Trasforma la tabella complessa in una lunga stringa di testo
    // Es: "[{'nome':'Mario'....}]"
    localStorage.setItem('adminData', JSON.stringify(tableData));
}

B. Il Caricamento (Parsing)

Quando riapriamo la pagina, usiamo JSON.parse per ricreare l'oggetto ("reidratazione").

// Leggiamo la stringa dal magazzino
let saved = localStorage.getItem('adminData');

if (saved) {
    // JSON.parse fa il contrario: prende il testo e ricrea gli oggetti vivi
    tableData = JSON.parse(saved);
}

5. Riepilogo dei flussi dati