Newsgroup: it.comp.lang.javascript
Titolo: Ma..

.. Io e Nando siamo gli unici che si preoccupano dei memory leaks? :)
-- 
"When you have eliminated the impossible, whatever remains, 
however improbable, must be the truth." 

 
Forse siete gli unici che avete capito qualcosa :-)
Scherzi a parte ho bookmarkato, ma non ho ancora trovato il tempo di
leggere con calma.
-- 
--
FABIO SERRA
Per rispondere in e-mail sostituire "invalid" con "faser"
*Questo testo deve essere valutato secondo il senso della RFC-3*
------------------


Sono un "javascript novellino" io e non ho avuto il tempo di darci 
un'occhiata decente...ma devo darcela. ;)
Ti ringrazio per questo, altrimenti chissa' quanto tempo ancora sarei andato 
avanti a far schifezze. 

 avanti a far schifezze.
Il problema maggiore sta nelle web application, o in alcune tipologie di siti. 
Laddove ad esempio ci sono operazioni ricorrenti, magari impostate tramite
setTimeout/setInterval.
Mi ricordo anni fa, uno script di news ticker di Brattli, che ciucciava
risorse di memoria come se piovesse.
-- 
"Your sin is beyond the grace of God" ~ Ky Kiske

 leggere con calma.
Ti premetto che quei link riguardano principalmente Internet Explorer.


 LOL :P
Quoto il LOL, per ovvi motivi :)
-- 
Nando [?]
Apostolo della Prova

 che io consideravo (speravo?) "leak-free" non lo sono affatto
Non ce la posso mai fare.


 Non ce la posso mai fare.
.. eh?


 .. eh?
Italianizzazione del comune modo di dire napoletano "nun nce 'a posso maje
fa'"; si usa per dire: non sarò mai in grado di affrontare un simile
compito. Nella fattispecie, mi riferivo alla comprensione approfondita del
memory leak. :)


 fa'";                                                           ^^^^^
Correggimi. In napoletano verace, non si usa " pozz' - puozz' "?
-- 
mailto: y = i
----------------------------------------
Vivo nel terrore di non essere frainteso 
(Oscar Wilde)

 memory leak. :)
Il concetto di base è banale. Hai un memory leak nel momento in cui allochi
della memoria, e non riesci più a deallocarla.
Era (è?) un errore molto comune in C, soprattutto per chi programmatore si
autodefiniva (ma capitava spesso anche ad esperti del settore, alcune memory
leaks sono subdoli), con la gestione dei puntatori.
Quando chiedi di allocare della memoria, ti viene restituito un puntatore che
si riferisce all'indirizzo di memoria allocato. E' il tuo unico riferimento
per gestire la memoria che hai chiesto. Se lo perdi, non puoi più
indirizzarla. Il che significa, che non puoi più nemmeno deallocarla. Immagina
il puntatore come un biglietto dove c'è scritto un indirizzo, o un numero di
telefono. Se lo perdi, non hai modo di contattare più quella persona.
Con un sistema del genere è facile intuire quanto fossero frequenti i memory
leaks. Per questo in molti linguaggi odierni hanno preferito incapsulare la
gestione dei puntatori, e fare un sistema di gestione memoria managed, usando
cose come il garbage collector.
Per quanto riguarda gli specifici problemi di IE, ciò che crea memory leaks è
l'interazione fra DOM e JS, con riferimenti circolari e closure.
Ovviamente non è una questione di puntatori in questo caso, bensì è "colpa"
del sistema sistema "reference count" degli oggetti (un oggetto viene
deallocato quando i riferimenti ad esso sono pari a zero), in connubio alla
gestione dell'ambiente DOM con lo script engine. In alcuni casi il reference
count di un oggetto non scende mai a zero, ergo la memoria non viene
deallocata.
Stai facendo una closure per assegnare un event handler? Otterrai un memory
leak, se non ti ricordi di de-assegnarlo prima di distruggere la pagina.
Rimuovi (anche con innerHTML) un nodo che aveva un event-handler impostato,
senza prima distruggerlo? Memory leak.
Più c'è il discorso dell'ordine in cui si aggiunge un nodo al DOM, dei tag
script, etc.
Tutti i browser soffrono di memory leaks, ma non come IE. Molti accorgimenti
che si devono prendere per quest'ultimo non dovrebbero essere affatto
necessari (ad es. la rimozione di event-handler assegnati prima di rimuovere
un nodo).


 Correggimi. In napoletano verace, non si usa " pozz' - puozz' "?
Hai ragione per le "z". Le vocali finali, però, si scrivono; non si leggono
ma si scrivono. Purtroppo non conosco bene il napoletano "verace" :(
Ah, per inciso... je pozzo=io posso, puozza=che tu possa (imprecazione
molto usata: puozza muri'! :) ).


 Tutti i browser soffrono di memory leaks, ma non come IE.
Ma si ingenerano per gli stessi motivi?


 molto usata: puozza muri'! :) ).
Pino Daniele: puozza passa' 'nu (g)uaio :)



Ma se io distruggo la pagina non viene deallocato tutto automaticamente?
Un po' come quando si chiude un processo..tutto la memoria allocata viene 
persa.
Che bisogno hanno i browser di mantenere attivi i riferimenti al dom di una 
pagina che non esiste piu'? 

 pagina che non esiste piu'?
Nessuno, infatti i memory leaks sono le conseguenze di bug (non solo tecnici,
ma anche di errori di progettazione).


 Pino Daniele: puozza passa' 'nu (g)uaio :)
Puozza passa' 'nu guaio llààààààà... addò nun coce 'o sole
:-D


 .. Io e Nando siamo gli unici che si preoccupano dei memory leaks? :)
Tranquillo, Zer0, ti leggo e aggiungo volentieri ai bookmark, ma in
questi giorni ... sto combattendo con l'esame di laurea #^__^#
Ciao.
-- 
tutte le macchine al potere, gli uomini a pane ed acqua

 questi giorni ... sto combattendo con l'esame di laurea #^__^#
Uhellallà. :) In bocca al lupo!


 Uhellallà. :) In bocca al lupo!
crepi ^^
-- 
«[...] Percio' tu non aspiri a nulla, non desideri nulla; l'unica cosa che
potresti desiderare e' una bacchetta magica che ti potesse dare tutto, e
poi la useresti per pulirti la pipa»