Co możesz zrobić dla swojego jQuery? – wydajność



Co możesz zrobić dla swojego jQuery? - wydajność

Jak już wielu czytelników pewnie zauważyło jestem wielkim zwolennikiem jQuery (może nawet czasami aż do przesady…), ale wykorzystuje go już przeszło 2 lata i wciąż jestem pod wrażeniem możliwości jakie ze sobą niesie.

Oczywiście nie jestem ekspertem w tej dziedzinie, ale przez te ostatnie lata zdążyłem zauważyć kilka bardzo przydatnych faktów, które dotyczących tej biblioteki. Faktów, które mogą się naprawdę przydać w tak zwanym codziennym programowaniu :)

1. Ładuj jQuery z Google Code

Jest to sposób, który zacząłem doceniać dopiero niedawno, kiedy zrozumiałem kilka podstawowych faktów. CDN (ang. content delivery network) Googla bardzo szybko ładuje bibliotekę, ale co ważniejsze istnieje bardzo duże prawdopodobieństwo, że ktoś, gdzieś już odwiedził stronę która ładowała jQuery w ten sam sposób, więc biblioteka jest już zcachowana. A jak załadować jQuery z Google Code? Bardzo prosto:

  1. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script>

2. Połącz wszystkie używane pliki JavaScriptowe i zminimalizuj je

Co prawda nie jest to uwaga szczególnie do jQuery, ale jest to mimo wszystko bardzo ważny punkt. Ogólnie im więcej plików z pojedynczymi skryptami ładujecie dla jednej podstrony tym dłużej będzie się ona ładować. Prawdą jest, że bardzo rzadko można połączyć wszystkie skrypty, by nie doprowadzić do sytuacji, że na konkretnej podstronie wykorzystujemy jedynie ułamek pliku, jednakże z pewnością można wydzielić grupy plików, które z powodzeniem można połączyć.

Druga sprawa, to minimalizowanie wielkości plików. Dobą praktyką wg mnie jest tworzenie 2 wersji plików developerskich i produkcyjnych. W developerskich piszemy piękny kod z odpowiednią ilością wcięć i komentarzy, a w produkcyjnej ograniczmy się do komentarza o autorze i tyle. Wszystkie niepotrzebne znaki usuwamy, a najlepiej korzystamy z gotowego rozwiązania online – mój ulubiony to minifyjavascript

3. Mała rzecz a cieszy

Może to nic wielkiego, ale zawsze kilka znaków mniej, czyli skrót zdarzenia ready – zamiast:

  1.     $(document).ready(function (){  
  2.         // jakiś kod
  3.     });

piszemy:

  1.     $(function (){  
  2.         // jakiś kod
  3.     });

4. Omijaj domyślne zachowanie zwracając false

Pewnie nie raz zdarzyło się wam, że w momencie, gdy strona była pod linią łamania i znajdował się tam link, do którego podpięliście zdarzenie click wędrowaliście na samą górę strony.

  1.    1. <a href="#" >Klikaj!</a>
  1.  $('a').click(function(){  
  2.      // obsługa zdarzenia click  
  3.  });

Aby temu zapobiec wystarczy wywołać event.preventDefault();, w ten sposób unikniemy wykonywania domyślnych zdarzeń.

  1.  $('a').click(function(event){  
  2.      // obsługa zdarzenia click  
  3.     event.preventDefault();
  4.  });

5. jQuery to nie wszystko

Niejednokrotnie przychodzi taki moment, w którym chcemy wykorzystać nie tylko jQuery, ale również inną bibliotekę, np. Mootools czy Prototype. Problem w tym, że większość bibliotek wykorzystuje ten sam symbol $, który może w prosty sposób prowadzić do konfliktów. Na szczęście możemy wykorzystać funkcję noconflict, dzięki której zwalniany jest znak $ i możliwe staje się zadeklarowanie innego znaku skrótu:

  1.  var $AC = jQuery.noConflict();  
  2.  $AC('#pojMain').show();

6. Używaj ID zamiast class

Dzięki jQuery odwoływanie się do elementów DOM z wykorzystaniem klas jest równie łatwe jak z wykorzystaniem id, przez co często nie zwraca się większej uwagi na selektory. Jednakże jest tu pewien haczyk. Zdecydowanie lepiej i wydajniej jest używać selektorów podając ID, ponieważ jQuery wykorzystuje wtedy natywną funkcję JavaScriptową – getElementByID. W niektórych przypadkach różnica może być nawet 100 krotna!

7. Dodaj kontekst do swoich selektorów

Prosta sprawa – jeżeli już musisz pobierać element za pośrednictwem klasy, to spraw by JavaScript nie musiał wędrować po całym DOM-ie, więc zamiast:

  1.    $('.klasa').css ('display','none');

napisz:

  1.    $('.klasa','#kontekst-klasy').css ('display','none');

8. Unikaj manipulacji elementami DOM

Manimulację elementami DOM powinno się ograniczać do absolutnego minimum, ponieważ operacje takie jak: prepend(), append(), after() są czasochłonne. Więc zamiast:

  1.  for (var i=0; i<100; i++) {
  2.                 $('#punkty').append('<li> punkt '+i+'</li>');
  3.  }

Można wykorzystać szybszą funkcję .html() i zbudować wcześniej listę elementów do wstawienia:

  1.  var punkty= '';
  2.  for (var i=0; i<100; i++) {
  3.   list += '<li> punkt '+i+'</li>';
  4.  }
  5.  ('#punkty').html (punkty);

9. Zależy Ci na czasie?

Jeżeli nie masz jeszcze zainstalowanego FireBuga, to nie wiem jak do tej pory rozwijałeś strony :p FireBug obecnie jest zarówno dla mnie jak i dla innych webdeveloperów jakich znam podstawowym narzędziem w programowani aplikacji online.

Poza najczęściej przeze mnie wykorzystywaną komendą konsolową (console.info), która wyrzuca na żądanie wartości zmiennych, wiadomości itp podczas wykonywania kodu JavaScript, pozostaje funkcja – console.time, która pozwala na mierzenie czasu wykonywania się fragmentu kodu. Samo jej użycie jest naprawdę proste:

  1.     console.time('zly_dom');  
  2.  
  3.  for (var i=0; i<100; i++) {
  4.                 $('#punkty').append('<li> punkt '+i+'</li>');
  5.  }
  6.  
  7.     console.timeEnd('zly_dom');

Np. gdybyśmy chcieli sprawdzić czy w pkt 8 napisałem prawdę :)

10. Kto mówił, że ściąganie jest złe?

I tak jeszcze na koniec – używaj jQuery cheat sheets. Jak pokazuje czas dobrze jest mieć pod ręką wydrukowane na stronie A4 wszystkie funkcje, ich składnie i co robią – tak żeby sobie przypomnieć na szybko co i jak. chociażby takie: jQuery cheat sheet

A wy jak zwiększacie wydajność waszego jQuery? Zachęcam do pisania w komentarzach :)

Related Posts with Thumbnails
Prześlij dalej:
Digg Google Bookmarks reddit Mixx StumbleUpon Technorati Yahoo! Buzz DesignFloat Delicious BlinkList Furl

13 komentarze do “Co możesz zrobić dla swojego jQuery? – wydajność”

Osobiście programowo jeszcze kompresuję wszystkie pliki JS gzipem (dzięki odpowiednim wpisom w htaccesie i jednemu plikowi PHP).

Identyczną kompresję stosuję też dla CSSa.

Dzięki za zestawienie! naprawdę super :)

Hehe, google dobrze pozycjonuje alchemycode.. Żeby odnaleźć ten wpis (nie wiedziałem gdzie go czytałem) wystarczyło w google wklepać „może jquery google” :D

commenter

hehe:) oby jak najwyżej w googlu :p

commenter

zaiste gzip jest przydatny :)

commenter

nalezy sprawdzic:)

commenter

Ad.10. Rzeczywiście taka „ściąga” może być przydatna, ale ja polecam pisanie JS-ów (i innych rzeczy) w NetBeans. Podpowiadanie składni w czasie rzeczywistym, to naprawdę fajna rzecz :) .

Zostaw komentarz:

Imię (wymagane):
Email:
Strona www:
Komentarz (wymagany):
XHTML: W komentarzach możesz korzystać z nastepujących tagów: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
-