jQuery a przeglądarki

0

Witam,

Ostatnio bawię się trochę jQuery i na starcie przeczytałem, że jest to rozwiązanie pozwalające na zastosowanie fajnych efektów na każdej przeglądarce. Wyeliminowano z niego niedoskonałości JS, dzięki czemu jeden kod działa na wszystkich przeglądarkach i platformach. W teorii super, ale w praktyce raczej kicha.
Dajmy na to kod z tej strony - http://tympanus.net/codrops/2010/04/30/rocking-and-rolling-rounded-menu-with-jquery/
Pod Chrome działa wyśmienicie, pod FF tylko połowicznie, bo rozwija się tylko raz (tylko przy pierwszym rozwijaniu kręcą się ikony), a do tego ikona wykonuje 2 obroty zamiast 4. Na IE już w cale nie działa, tylko podstawowa funkcja animate() do rozwijania menu.

I teraz moje pytanie. Nie działa bo jest błąd w pluginie, czy po prostu tak mają przeglądarki. IE i FF mam w najnowszej wersji, więc to troszkę dziwne, że nie działa. Do tego całe te efekty w tych przeglądarkach, jakby się przycinają. Na Chrome natomiast wszystko działa dobrze i płynnie. Sprawdzałem również obciążenie procesora i w Chrome jest ono o 10% niższe w stosunku do pozostałych 2 przeglądarek.

0

u mnie na operze 11.50 i IE 9.0.8112 64b działa dokładnie tak samo - przyciski rozwijają się płynnie, bez żadnego przycinania ale nic się nie kręci

0

nie wiem jak dziala w jQuery animacja "rotate", ale czy nie uzywa ona css3? (choć wtedy powinno mi śmigać na Operze). Wtedy nie byłby to problem js tylko obsługi css. Generalnie chyba rozminąłeś się z ideą jQuery - to nie framework do animacji. Można go do tego wykorzystać, ale nie jest to cel nr. 1. Spróbuj załadować jQuery UI razem ze skryptem - może pomóc w niektórych sprawach.

2

[o jQuery:]

Robster napisał(a)

Wyeliminowano z niego niedoskonałości JS, dzięki czemu jeden kod działa na wszystkich przeglądarkach i platformach.

jQuery nie eliminuje żadnych, lub prawie żadnych niedoskonałości JS.

jQuery w sporej części stara się wyeliminować problemy z kompatybilnością przeglądarek. Braki w kompatybilności to nie niedoskonałość JS, tylko implementacji. W dodatku nie implementacji samego JavaScriptu, tylko raczej DOM czy części silnika renderującego skupiającego się na CSS. Jak wiadomo, CSS może sobie spokojnie istnieć bez JavaScriptu. DOM zresztą też -- są implementacje DOM dla Javy, C++ i pięciuset milionów ;) innych języków.

Tak się składa, że interfejs DOM jest strasznie niewygodny. jQuery opakowuje go we własny interfejs -- wygodny, o wiele bardziej zwięzły i przyjazny dla programisty. W dodatku, jQuery eliminuje wiele niezgodności pomiędzy przeglądarkami. Na tym polega siła jQuery. Takie np. animacje to pewien dodatek.

Robster napisał(a)

Sprawdzałem również obciążenie procesora i w Chrome jest ono o 10% niższe w stosunku do pozostałych 2 przeglądarek.

To jest chyba oczywiste: różne przeglądarki mają różne silniki JS-owe. Różnią się nie tylko zgodnością ze standardem ECMAScriptu czy JavaScriptu, ale również wydajnością. V8 z Chrome'a należy do najszybszych i najlepszych silników, m.in. dzięki dobrej (jak na obecne czasy) kompilacji w locie do kodu bardzo niskiego poziomu.

Różnice w wydajności rzędu 10% są zresztą nieistotne. Większe różnice w prędkości działania aplikacji będą wynikały z tego, że użytkownicy mają różny hardware.

Tak naprawdę, Chrome może być o całe rzędy wielkości szybsze od starych IE.

W ogóle wydajność JS w nowych przeglądarkach podskoczyła diametralnie. To nie chodzi tylko o to, że ludzie mają lepsze procki: JS w nowych przeglądarkach naprawdę chodzi znacznie szybciej niż na starych.

[o poziomie kompatybilności zapewnianym przez jQuery]

Robster napisał(a)

W teorii super, ale w praktyce raczej kicha.

Nie nazwałbym tego kichą. Sama biblioteka jQuery eliminuje niezgodności na tyle, na ile się da. No, może dałoby się trochę lepiej, ale jQuery trzyma pod tym względem naprawdę wysoki poziom.

Różnice jednak są i będą. Zobacz np. notki przy opisie load() (z Events):
http://api.jquery.com/load-event/

Ta funkcja nie działa zbyt dobrze w pewnych okolicznościach. Dokumentacja jQuery jednak dość dobrze wymienia te przypadki i przed nimi ostrzega. Takie ostrzeżenia są rzadkością w dokumentacji, bo niewiele jest funkcji, które mają takie problemy, jak load(). Rdzeń biblioteki jQuery (czyli cała goła biblioteka jQuery) jest w naprawdę sporym stopniu bezpieczny. Z reguły nie wrzucają tam funkcji, które mogą się kaszanić na różnych przeglądarkach. Każda funkcja musi przejść skrupulatne testy. Czasami, jak w przypadku load(), po prostu nie da się zapewnić pełnej kompatybilności, ale to wyjątkowe przypadki.

Co innego pluginy...

One potrafią mieć fatalną, fatalną jakość. Pluginy piszą również ludzie, którzy nie znają za dobrze ani JavaScriptu, ani kwestii związanych z kompatybilnością, a często nawet nie znają za dobrze samej biblioteki jQuery. Jednak sklecą jakiś plugin i publikują na blogu.

I niech sobie publikują. Tyle że wypada ostrzec ludzi przed jakością takiego pluginu. Po prostu, w pewnych okolicznościach, w pewnych przeglądarkach może on zwyczajnie się wysypać. Twórcy dobrych bibliotek i dobrych pluginów do tego nie dopuszczają: skrupulatnie trzymają się listy wspieranych przeglądarek.

Okazuje się, że stosunkowo łatwo napisać coś na pałę, co działa w danym przypadku i danej przeglądarce. Mniej doświadczeni programiści, którzy nigdy nie tworzyli poważnych bibliotek, myślą czasem, że to już dużo, że to większość pracy. Tymczasem często okazuje się, że tego czegoś wręcz NIE DA się przenieść na inne przeglądarki, bo skorzystano z jakichś egzotycznych ułatwiaczy. Pal sześć, gdy to świeżo ustandaryzowane nowinki, ale czasami to po prostu jakieś dodatki od twórcy danej przeglądarki -- inni nawet nie mają zamiaru tego implementować.

Robster napisał(a)

Nie działa bo jest błąd w pluginie, czy po prostu tak mają przeglądarki. IE i FF mam w najnowszej wersji, więc to troszkę dziwne, że nie działa.

Z tego co pobieżnie sprawdziłem, plugin do jQuery korzysta z transformacji CSS. Pewnie trafią do CSS3, ale droga do standaryzacji jeszcze dość daleka. Więc i nie wszystkie przeglądarki to na tę chwilę obsługują.

Ot, autor poszedł na łatwiznę: przeglądarka praktycznie za niego wykonuje te obroty. Gdyby chciał, żeby to było kompatybilne i przenośne, musiałby napisać sporo więcej kodu, używając <canvasa> i odpowiedniego fixa dla IE.

Może autor po prostu uznał, że w przeglądarkach, które nie obsługują transformacji, obroty po prostu nie będą działały. W sumie to logiczne: nie są w tym wszystkim najważniejsze i ich brak nie spowoduje, że menu będzie nieczytelne, czy coś. Powinno się o tym jednak wspomnieć w dokumentacji.

Co do tego, czemu nie działa to za dobrze w Fx, to nie chce mi się sprawdzać. Jestem jednak przekonany, że to nie jest wina jQuery, tylko pluginu. Ktoś coś spieprzył lub olał kompatybilność i tyle. Samo jQuery w ogóle nie ma animacji rotate, być może właśnie przez brak rozsądnej możliwości zapewnienia wsparcia w przeglądarkach. jQuery nie odpowiada za ten błąd.

Naturalnie, sam fakt użycia jQuery nie oznacza, że kod będzie kompatybilny ze wszystkim. Używając jQuery, używamy JavaScriptu. Nikt nam nie zabroni zaraz obok wywołań jQuery walnąć 100 linii korzystających z microsoftowego ActiveX. I że będzie działało tylko w IE, to nie wina jQuery, tylko nasza. Jeśli napiszemy plugin do jQuery, który korzysta z ActiveX, i nie będzie on działał w IE, to to ponownie jest nasza wina, a nie jQuery. jQuery nie zapewnia uniwersalnej obsługi ActiveX. jQuery zapewnia, że jej funkcje, takie jak addClass(), $(selektor) czy delegate() będą działały jak należy we wszystkich wspieranych przeglądarkach, chyba że zaznaczono inaczej.

0

Robiłem stronę na konkurs, która w zdecydowanej większości oparta była na jQuery i powiem Ci szczerze, że jeżeli chodzi o przeglądarki to naprawdę mają duże wsparcie dla tego frameworka. Moja strona działała płynnie na Chrome, Mozilli, Operze oraz Safari (nawet na iPadzie). Jedyną zgrozą był i dalej jest Internet Explorer nawet w wersji 9, który rzekomo niby wspiera CSS3... :) Tak więc strzeż się po prostu tej przeglądarki a będzie dobrze :) Radzę Ci często korzystać z dokumentacji jQuery gdyż tam wszystko jest fajnie wyjaśnione. Na tym wyjdziesz lepiej, niż miałbyś robić coś sam i to spieprzyć...

1 użytkowników online, w tym zalogowanych: 0, gości: 1