29 września 2007
Problem związany jest z bardzo duży obciążeniem procesora. Od kilku dni szukałem tego błędu w swoim kodzie, zrefaktoryzowałem go kilka razy, a tu niespodziewanie zawiniło jQuery w wersji 1.2 i 1.2.1. Oto sposób na odtworzenie błędu:
wystarczy stworzyć stronę o treści podobnej do tej (zamiast jqDnR może zostać wykorzystany każdy inny plugin oferujący możliwość przeciągania i upuszczania):
<html> <head> <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.2.1.pack.js"></script> <script type="text/javascript" src="http://dev.iceburg.net/jquery/jqDnR/jqDnR.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("#drawing").jqDrag(); }); </script> </head> <body> <div style="position:relative;left:50;top:50;display:block;background-color:red; width: 50px; height: 50px;" id="drawing"/> </body> </html>
następnie wchodzimy na tę stronę i wykonujemy kilkukrotnie operację przeciągania i upuszczania, potem wystarczy ruszać myszką w obrębie strony i obserwować zużycie procesora.
Dla porównania proponuję przeprowadzić ten sam eksperyment na stronie, która korzysta z jQuery w wersji 1.1.4
<html> <head> <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.1.4.pack.js"></script> <script type="text/javascript" src="http://dev.iceburg.net/jquery/jqDnR/jqDnR.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("#drawing").jqDrag(); }); </script> </head> <body> <div style="position:relative;left:50;top:50;display:block;background-color:red; width: 50px; height: 50px;" id="drawing"/> </body> </html>
Z szybkich testów, które właśnie przeprowadzam wynika, że wersja 1.2 posiada problem z „uwalnianiem” zdarzenie mousemove. Po zakończeniu operacji przeciągania i opuszczania cały czas przechwytywane są te zdarzenia i co więcej (jak wynika z firebuga) jQuery dla każdego takiego zdarzenia wykonuję metodę extend(). Na razie nie znam rozwiązania tego problemu i póki co zalecam korzystanie z jQuery 1.1.4 . Jeszcze dziś błąd zostanie zgłoszony twórcom biblioteki.
29 września 2007 o 14:58:28
Na firefox'ie 2.0.0.7 pod linuxem problem nie występuje. Przy przeciąganiu zacina, ale po puszczeniu nie zużywa procesora.
29 września 2007 o 15:26:42
cOyOte: wlasnie przetestowalem wszystkie moje przegladarki:
linux: opera 9.0,firefox 2.0.0.7, konqueror 3.5.5
windows: opera 9.22,ie6,firefox 2.0.0.7
i problem wystepuje wszedzie. Zeby go zobaczyc musisz po prostu wykonac kilka (kilkanascie w zaleznosci od sprzetu jakim dysponujesz) kolejnych operacji chwycenia obiektu, przesuniecia i puszczenia.
10 kwietnia 2008 o 13:24:40
Faktycznie widać znaczną różnicę.