Ridurre il consumo di memoria [chiuso]

22

Il framework Redux favorisce il paradigma immutabile di stato / pura funzione, che promuove la creazione di un nuovo stato dallo stato precedente in termini di azione corrente. L'applicabilità di questo paradigma è indubitabile.

Una mia preoccupazione principale è che, poiché i riduttori di Redux restituiscono con entusiasmo nuovi stati freschi dai precedenti stati per ogni singola azione invocata, una massiccia perdita di memoria (da non confondere con perdite di memoria) diventerebbe un evento comune in molti -applicazioni mondiali. Quando si considera che le applicazioni Javascript normalmente vengono eseguite in un browser in dispositivi di un utente medio che potrebbero essere in esecuzione anche con altre applicazioni specifiche del dispositivo e numerose altre schede e finestre del browser, la necessità di conservare la memoria diventa sempre più evidente.

Qualcuno ha effettivamente confrontato il consumo di memoria di un'applicazione Redux con l'architettura tradizionale di Flux? Se sì, potrebbero condividere le loro scoperte?

    
posta 000 06.02.2016 - 18:54
fonte

1 risposta

30

Questa è una preoccupazione valida. Mentre non ho misurato l'utilizzo della memoria delle applicazioni di Redux, penso che prima di impegnarsi a usare Redux (o qualsiasi altra struttura per quella materia) dovresti creare stress test che emulino l'ammontare dei dati, cambi la frequenza e l'intensità di calcolo dell'applicazione stanno andando a costruire. Utilizzare questi test di stress prima di prendere decisioni tecnologiche sul fatto che l'adozione di immutabilità funzioni nel caso specifico.

Si noti che a volte le persone si confondono su Redux e assumono che su ogni azione, l'albero dello stato deve essere clonato profondamente. Questo non è assolutamente il caso. Solo le parti che sono cambiate devono cambiare i loro riferimenti. Ad esempio, se un'azione provoca una modifica di un elemento in un array, infatti, quell'elemento e l'array dovranno essere copiati, tuttavia , tutti gli altri elementi dell'array manterranno le loro identità. Poiché la maggior parte delle volte le azioni sono molto mirate e influenzano alcune chiavi di stato, e poiché Redux incoraggia la normalizzazione dei dati in modo che le strutture dei dati non siano profondamente annidate, questo è molto meno un problema per le webapp tipiche di quanto si possa immaginare.

Dovrai esplorare anche utilizzando librerie come Immutable.js che implementano elenchi e mappe immutabili in modo efficiente utilizzando la condivisione strutturale internamente. In questo modo, la modifica di alcuni elementi in un elenco non comporta una copia così grande poiché internamente la maggior parte della memoria viene condivisa tra diverse versioni della struttura dati.

Ma alla fine, l'unico modo per dire è scrivere gli stress test che emulano da vicino l'uso previsto della tua app e misurare l'efficienza per te stesso.

    
risposta data 06.02.2016 - 19:47
fonte

Leggi altre domande sui tag