In SPA cosa succede in termini di memoria e prestazioni quando l'utente salta su tutte le pagine?

5

Immagina un'enorme applicazione Web costruita utilizzando framework di applicazioni per pagine singole come AngularJS. Con ogni percorso, scarica un paio di file modello HTML. Ciascuno di questi file modello contiene file JS univoci. Quindi, ora quando scaricheranno ciascuno di questi file modello, verrà estratto e scaricato anche i file JS.

Questa è solo una situazione ipotetica per capire come i browser potrebbero funzionare in una situazione del genere.

Che cosa accadrà in termini di memoria e prestazioni quando l'utente salta rapidamente su tutte le pagine (che possono essere 100 o 1000 di tali pagine)? Tutte le variabili JS consumeranno la memoria e inutilmente la intaseranno o il JS Garbage Collector verrà in soccorso?

    
posta Temp O'rary 15.01.2016 - 14:41
fonte

1 risposta

3

Dipende dal tuo codice JavaScript e dal tuo DOM (e, in linea di principio, dall'implementazione JavaScript nel browser; invita i tuoi utenti a utilizzare le versioni recenti dei browser). Hai bisogno di saperne di più sulle tecniche garbage collection (ad esempio il Manuale GC ), vedi GC di Mozilla SpiderMonkey pagina.

Un valore che è ancora indirettamente raggiungibile da variabili globali o locali non sarà raccolto. Il GC seguirà i riferimenti in valori aggregati (tra cui chiusure , matrici, oggetti, ...).

Potresti voler attentamente e abilmente usare riferimenti deboli , ad es JavaScript WeakMap s.

Concettualmente , il GC sta calcolando la chiusura transitiva del grafico di riferimento, a partire da variabili globali e locali (nello stack di chiamate). Questi valori sono alive e i valori morti vengono infine distrutti dal GC poiché sono spazzatura . Un valore raggiungibile solo tramite riferimenti deboli non verrà mantenuto.

Anche con un GC, un programma può presentare una perdita di memoria , in particolare se mantiene in qualche variabile un valore quale mai essere utile in futuro. E rilevare queste tecniche di analisi statica del codice è un problema indecidibile , probabilmente equivalente al problema di interruzione .

    
risposta data 15.01.2016 - 14:48
fonte