🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.javascript
9 messages
9 total messages Started by 3P Thu, 06 Jan 2011 21:41
Podłączanie się pod zdarzenia i konieczność odpinania? Wycieki pamięci?
#50476
Author: 3P
Date: Thu, 06 Jan 2011 21:41
21 lines
1451 bytes
Hej.

Jestem lama jeżeli chodzi o JS. Powiedzcie mi proszę, czy jeżeli podepnę  
się pod event elementu,
to czy muszę się kiedyś od niego odpiąć, aby nie wywoływać wycieków  
pamięci?

(jQuery znam lepiej niż czysty JS)
$("#button").click(function() { alert("click"); };

w czystym JS to chyba mniej więcej
var button = document.getElementById("button");
button.onclick = function() { alert("click") };


Czy powyższe spowoduje wyciek pamięci?
A może tylko jeżeli w obsłudze zdarzenia modyfikowałbym jakieś elementy  
DOM?

-- 
3P
Re: Podłączanie się pod zdarzenia i konieczność odpinania? Wycieki pamięci?
#50470
Author: Peter May
Date: Fri, 07 Jan 2011 00:06
34 lines
1966 bytes
W dniu 2011-01-06 22:41, 3P pisze:
> Hej.
>
> Jestem lama jeżeli chodzi o JS. Powiedzcie mi proszę, czy jeżeli podepnę
> się pod event elementu,
> to czy muszę się kiedyś od niego odpiąć, aby nie wywoływać wycieków
> pamięci?
>
> (jQuery znam lepiej niż czysty JS)
> $("#button").click(function() { alert("click"); };
>
> w czystym JS to chyba mniej więcej
> var button = document.getElementById("button");
> button.onclick = function() { alert("click") };
> Czy powyższe spowoduje wyciek pamięci?

Tak. W IE6,7. Jeśli chcesz uniknąć wycieków pamięci w IE6 i 7 (nie wiem, 
czy poprawili to w IE8 i chyba nie warto już sobie zawracać głowy IE6), 
to lepiej nie podpinać anonimowych funkcji do zdarzeń. Zamiast tego zrób 
tak:

button.onclick = mojafunkcja;

var mojafunkcja = function()
{
  alert("test");
}

> A może tylko jeżeli w obsłudze zdarzenia modyfikowałbym jakieś elementy
> DOM?
>

-- 
Peter
Re: Podłączanie się pod zdarzenia i konieczność odpinania? Wycieki pamięci?
#50483
Author: Peter May
Date: Fri, 07 Jan 2011 00:08
26 lines
1778 bytes
W dniu 2011-01-06 22:41, 3P pisze:
> Hej.
>
> Jestem lama jeżeli chodzi o JS. Powiedzcie mi proszę, czy jeżeli podepnę
> się pod event elementu,
> to czy muszę się kiedyś od niego odpiąć, aby nie wywoływać wycieków
> pamięci?
>
> (jQuery znam lepiej niż czysty JS)
> $("#button").click(function() { alert("click"); };
>
> w czystym JS to chyba mniej więcej
> var button = document.getElementById("button");
> button.onclick = function() { alert("click") };
>
>
> Czy powyższe spowoduje wyciek pamięci?
> A może tylko jeżeli w obsłudze zdarzenia modyfikowałbym jakieś elementy
> DOM?

I jeszcze jedno: spróbuj dodatku do Firefoksa 
https://addons.mozilla.org/pl/firefox/addon/2490/, który pomoże Ci 
namierzyć wycieki.

-- 
Peter
Re: Podłączanie się pod zdarzenia i konieczność odpinania? Wycieki pamięci?
#50473
Author: 3P
Date: Fri, 07 Jan 2011 00:29
44 lines
2411 bytes
Dnia 07-01-2011 o 01:06:23 Peter May <peter.may@onet.pl> napisał(a):

> W dniu 2011-01-06 22:41, 3P pisze:
>> Hej.
>>
>> Jestem lama jeżeli chodzi o JS. Powiedzcie mi proszę, czy jeżeli podepnę
>> się pod event elementu,
>> to czy muszę się kiedyś od niego odpiąć, aby nie wywoływać wycieków
>> pamięci?
>>
>> (jQuery znam lepiej niż czysty JS)
>> $("#button").click(function() { alert("click"); };
>>
>> w czystym JS to chyba mniej więcej
>> var button = document.getElementById("button");
>> button.onclick = function() { alert("click") };
>> Czy powyższe spowoduje wyciek pamięci?
>
> Tak. W IE6,7. Jeśli chcesz uniknąć wycieków pamięci w IE6 i 7 (nie wiem,  
> czy poprawili to w IE8 i chyba nie warto już sobie zawracać głowy IE6),  
> to lepiej nie podpinać anonimowych funkcji do zdarzeń. Zamiast tego zrób  
> tak:
Wierz lub nie, ale muszę pisać pod IE6. Pod FF nawet nie da się otworzyć  
tej aplikacji.

>
> button.onclick = mojafunkcja;
>
> var mojafunkcja = function()
> {
>   alert("test");
> }
>
A czy jeżeli w powyższej mofafunkcja będę modyfikował elementy DOM to nie  
będzie problemu?
Myślałem, że problemem może być nie samo podpięcie anonimowej funkcji, ale  
to co się tam dzieje.

Dziwne bo przenigdy nie widziałem na stronach/książkach o jQuery  
przykładów, gdzie musieli
odpinać się od eventu ze względu na wycieki pamięci.

-- 
3P
Re: Podłączanie się pod zdarzenia i konieczność odpinania? Wycieki pamięci?
#50478
Author: Piotrek Reinmar Koszuliński
Date: Fri, 07 Jan 2011 09:10
55 lines
3345 bytes
Nie znam jQuery i sposobu w jaki zaimplementowali podpinanie eventów,
ale obstawiałbym, że wzięli pod uwagę to czy taki sposób obsługi tej
funkcjonalności nie będzie rodził problemów pod IE6/7.

@Peter: Dzięki za link do dodatku. Akurat szukałem podobnego :)

On 7 Sty, 01:29, 3P <3...@noserver.com> wrote:
> Dnia 07-01-2011 o 01:06:23 Peter May <peter....@onet.pl> napisał(a):
>
>
>
> > W dniu 2011-01-06 22:41, 3P pisze:
> >> Hej.
>
> >> Jestem lama jeżeli chodzi o JS. Powiedzcie mi proszę, czy jeżeli podepnę
> >> się pod event elementu,
> >> to czy muszę się kiedyś od niego odpiąć, aby nie wywoływać wycieków
> >> pamięci?
>
> >> (jQuery znam lepiej niż czysty JS)
> >> $("#button").click(function() { alert("click"); };
>
> >> w czystym JS to chyba mniej więcej
> >> var button = document.getElementById("button");
> >> button.onclick = function() { alert("click") };
> >> Czy powyższe spowoduje wyciek pamięci?
>
> > Tak. W IE6,7. Jeśli chcesz uniknąć wycieków pamięci w IE6 i 7 (nie wiem,  
> > czy poprawili to w IE8 i chyba nie warto już sobie zawracać głowy IE6),  
> > to lepiej nie podpinać anonimowych funkcji do zdarzeń. Zamiast tego zrób  
> > tak:
>
> Wierz lub nie, ale muszę pisać pod IE6. Pod FF nawet nie da się otworzyć  
> tej aplikacji.
>
>
>
> > button.onclick = mojafunkcja;
>
> > var mojafunkcja = function()
> > {
> >   alert("test");
> > }
>
> A czy jeżeli w powyższej mofafunkcja będę modyfikował elementy DOM to nie  
> będzie problemu?
> Myślałem, że problemem może być nie samo podpięcie anonimowej funkcji, ale  
> to co się tam dzieje.
>
> Dziwne bo przenigdy nie widziałem na stronach/książkach o jQuery  
> przykładów, gdzie musieli
> odpinać się od eventu ze względu na wycieki pamięci.
>
> --
> 3P
Re: Podłączanie się pod zdarzenia i konieczność odpinania? Wycieki pamięci?
#50481
Author: Peter May
Date: Fri, 07 Jan 2011 09:59
58 lines
3014 bytes
W dniu 2011-01-07 01:29, 3P pisze:
> Dnia 07-01-2011 o 01:06:23 Peter May <peter.may@onet.pl> napisał(a):
>
>> W dniu 2011-01-06 22:41, 3P pisze:
>>> Hej.
>>>
>>> Jestem lama jeżeli chodzi o JS. Powiedzcie mi proszę, czy jeżeli podepnę
>>> się pod event elementu,
>>> to czy muszę się kiedyś od niego odpiąć, aby nie wywoływać wycieków
>>> pamięci?
>>>
>>> (jQuery znam lepiej niż czysty JS)
>>> $("#button").click(function() { alert("click"); };
>>>
>>> w czystym JS to chyba mniej więcej
>>> var button = document.getElementById("button");
>>> button.onclick = function() { alert("click") };
>>> Czy powyższe spowoduje wyciek pamięci?
>>
>> Tak. W IE6,7. Jeśli chcesz uniknąć wycieków pamięci w IE6 i 7 (nie
>> wiem, czy poprawili to w IE8 i chyba nie warto już sobie zawracać
>> głowy IE6), to lepiej nie podpinać anonimowych funkcji do zdarzeń.
>> Zamiast tego zrób tak:
> Wierz lub nie, ale muszę pisać pod IE6. Pod FF nawet nie da się otworzyć
> tej aplikacji.

To współczuję :-(

>> button.onclick = mojafunkcja;
>>
>> var mojafunkcja = function()
>> {
>> alert("test");
>> }
>>
> A czy jeżeli w powyższej mofafunkcja będę modyfikował elementy DOM to
> nie będzie problemu?

Nie będzie problemu. Staraj się "kasować z pamięci" nieużywane już 
obiekty, np.:

var elms = document.getElementsByTagName("*");
[...]

elms = null;

> Myślałem, że problemem może być nie samo podpięcie anonimowej funkcji,
> ale to co się tam dzieje.
>
> Dziwne bo przenigdy nie widziałem na stronach/książkach o jQuery
> przykładów, gdzie musieli
> odpinać się od eventu ze względu na wycieki pamięci.

Wbrew temu, co się sądzi, frameworki nie o wszystko zadbają za nas. Nie 
są samym w sobie złem, ale nie można też im bezgranicznie ufać ;-)

-- 
Peter
Re: Podłączanie się pod zdarzenia i konieczność odpinania? Wycieki pamięci?
#50479
Author: zpk
Date: Fri, 07 Jan 2011 12:07
18 lines
2001 bytes
>
> Wierz lub nie, ale muszę pisać pod IE6. Pod FF nawet nie da się otworzyć  
> tej aplikacji.
>

Wygląda na to, że masz coś źle napisane, np.

document.getElementById('bStart').bla='Blach';

zamiast

document.getElementById('bStart').setAttribute('bla')='Blach';

(akurat ja kiedyś miałem z w/w problem, ale są i inne, należy
przeszukać kod. MS wprowadził trochę swoich sztuczek, które gdzie
indziej nie działają)

Paweł
Re: Podłączanie się pod zdarzenia i konieczność odpinania? Wycieki pamięci?
#50480
Author: Peter May
Date: Sat, 08 Jan 2011 08:16
25 lines
1837 bytes
W dniu 2011-01-07 13:07, zpk pisze:
>>
>> Wierz lub nie, ale muszę pisać pod IE6. Pod FF nawet nie da się otworzyć
>> tej aplikacji.
>>
>
> Wygląda na to, że masz coś źle napisane, np.
>
> document.getElementById('bStart').bla='Blach';
>
> zamiast
>
> document.getElementById('bStart').setAttribute('bla')='Blach';
[...]

Ten zapis jest nieprawidłowy. Jeśli już, to:

document.getElementById('bStart').setAttribute('bla', 'Blach');

Na pewno nie używałbym setAttribute i style, bo to rodzi problemy w IE.

http://www.quirksmode.org/dom/w3c_core.html

-- 
Peter
Re: Podłączanie się pod zdarzenia i konieczność odpinania? Wycieki pamięci?
#50482
Author: William Bonawentura
Date: Thu, 27 Jan 2011 12:19
20 lines
1799 bytes
?
Użytkownik "Peter May" <peter.may@onet.pl> napisał w wiadomości 
news:ig5lek$9o6$1@news.onet.pl...
>
> Tak. W IE6,7. Jeśli chcesz uniknąć wycieków pamięci w IE6 i 7 (nie wiem, 
> czy poprawili to w IE8 i chyba nie warto już sobie zawracać głowy IE6), to 
> lepiej nie podpinać anonimowych funkcji do zdarzeń. Zamiast tego zrób tak:
>
> button.onclick = mojafunkcja;
>
> var mojafunkcja = function()
> {
>  alert("test");
> }
>

Obawiam się, że w IE6 oraz IE7 wycieki pamięci są zawsze - choćbyś i usuwał 
wszystkie referencje cykliczne, nullował referencje w js, usuwał węzły DOM. 
Taka już jest natura tej przeglądarki i tyle. Dlatego upgrade na IE8 nie 
jest opcjonalne tylko obowiązkowe. 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads