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?
Author: 3P
Date: Thu, 06 Jan 2011 21:41
Date: Thu, 06 Jan 2011 21:41
21 lines
1451 bytes
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?
Author: Peter May
Date: Fri, 07 Jan 2011 00:06
Date: Fri, 07 Jan 2011 00:06
34 lines
1966 bytes
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?
Author: Peter May
Date: Fri, 07 Jan 2011 00:08
Date: Fri, 07 Jan 2011 00:08
26 lines
1778 bytes
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?
Author: 3P
Date: Fri, 07 Jan 2011 00:29
Date: Fri, 07 Jan 2011 00:29
44 lines
2411 bytes
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?
Author: Piotrek Reinmar Koszuliński
Date: Fri, 07 Jan 2011 09:10
Date: Fri, 07 Jan 2011 09:10
55 lines
3345 bytes
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?
Author: Peter May
Date: Fri, 07 Jan 2011 09:59
Date: Fri, 07 Jan 2011 09:59
58 lines
3014 bytes
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?
Author: zpk
Date: Fri, 07 Jan 2011 12:07
Date: Fri, 07 Jan 2011 12:07
18 lines
2001 bytes
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?
Author: Peter May
Date: Sat, 08 Jan 2011 08:16
Date: Sat, 08 Jan 2011 08:16
25 lines
1837 bytes
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?
Author: William Bonawentura
Date: Thu, 27 Jan 2011 12:19
Date: Thu, 27 Jan 2011 12:19
20 lines
1799 bytes
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