JavaScript

jQuery 2.0 – krótko o zmianach w (nie tak) nowej wersji biblioteki

Od wpisu informującego o nowej wersji biblioteki jQuery na oficjalnym blogu mija dokładnie pół roku. Mimo tego, gdyby zrobić badanie ile popularnych serwisów korzysta z wersji jQuery oznaczonej dwójką to wydawało by się, że developerzy są trochę leniwi z wdrażaniem „nowości”. Prawda jak zwykle leży gdzieś po środku, gdyż jQuery od wersji 2.0 pożegnała się ze wsparciem dla IE 6/7/8. Zanim jednak co niektórzy z Was zaczną przeklinać pod nosem zespół jQuery wyjaśnię, że gałąź 1.x nadal będzie rozwijana tak by zapewnić, w miarę możliwości, jak najlepsze wsparcie również tym trzem przestarzałym przeglądarkom. Pozostawienie starych IE samym sobie w jQuery 2.0 jest właśnie powodem nowej numeracji, co do tego nikt raczej nie ma wątpliwości.

Sprytne dodawanie jQuery w zależności od klienta

Możemy oczywiście dobrać odpowiednią wersje biblioteki jQuery do przeglądarki użytkownika. Twórcy proponują rozwiązanie oparte o tagi warunkowe.

<!--[if lt IE 9]>
    <script src="jquery-1.9.1.js"></script>
<![endif]-->
<!--[if gte IE 9]><!-->
    <script src="jquery-2.0.0b2.js"></script>
<!--<![endif]-->

Zainspirowany tym rozwiązaniem stworzyłem trochę bardziej rozbudowaną i uwzględniającą pobieranie biblioteki z serwerów Google z zabezpieczeniem się przed ewentualnymi problemami:

<!--[if lt IE 9]>
    <script>
    document.write('<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>');
    if (!window.jQuery) {
        document.write('<script src="/path/to/your/jquery-1.10.2"></script>');
    }
  </script>
<![endif]-->

<!--[if gte IE 9]><!-->
    <script>
      document.write('<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>');
    if (!window.jQuery) {
        document.write('<script src="/path/to/your/jquery-2.0.3"></script>');
    }
  </script>
<!--<![endif]-->

Migracja

Twórcy zadbali o to by bezboleśnie przejść na nową wersje biblioteki i udostępniają plugin pozwalający na łatwą migrację.

Zgodność, rozmiar i jeszcze raz rozmiar!

Brak wsparcia dla IE 6/7/8, o którym już wcześniej wspomniałem, może wpłynąć na IE9, a nawet na jeszcze nowsze wersje Internet Explorer za sprawą trybu „widok zgodności”. Aby się przed tym ustrzec nie potrzebujemy na szczęście żadnych specjalnych trików, o wątpliwej skuteczności (do czego przyzwyczaił nas kiedyś MS). Podobno wystarczy skromne <!DOCTYPE>, ale nie zaszkodzi też tag X-UA-Compatible, a niektórzy z nas będą spać spokojniej:

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

Brak wsparcia dla przestarzałych IE w najnowszej wersji jQuery nie (tylko) jest wynikiem frustracji developerów czy wyrazem buntu przeciwko internautom, którzy przespali ostatnie dziesięciolecie. Zmiany te podyktowane zostały zmniejszeniem rozmiaru biblioteki o 12-15%. Osobiście nawet te 15% jakoś mnie nie przekonuje na tyle by zaryzykować problemy z naszymi „ulubionymi” przeglądarkami, no ale przynajmniej jest z czego wybierać.

Changelog

Jako, że zabawa w „Ctrl+C, Ctrl+V” nie ma większego sensu odsyłam Was do changelogów:

Warto przy tym zwrócić uwagę, że różnice między samym pisaniem kodu z wykorzystaniem jQuery 1.x, a 2.x, przynajmniej na dzień dzisiejszy, są tak nieduże, że większa część zmian jest wspólna dla obu wersji.

Podsumowanie

Nie zachęcam do korzystania z jQuery 2.0, ale też nie odradzam. Skoro masz już jakieś pojęcie o różnicach decyzję pozostawiam Tobie. Wiem, że są osoby, które w epoce LTE i światłowodów nadal walczą o każde zapytanie do serwera i każdy KB więc myślę, że z nieskrywaną przyjemnością przechodzić będą powoli na gałąź 2.x, jednak sam pozostanę przy 1.x i od czasu do czasu uruchomię emulacje starszych wersji Internet Explorer. Warto też przypomnieć, że jQuery jest też wykorzystywana w celach „non-web-site” do pisania aplikacji czy różnej maści pluginów i dodatków, tam gałąź 2.x jest zdecydowanie lepszym wyborem.

komentarzy 5

  • Awatar
    Piotr Nalepa

    19 października 2013 22:24

    Dla niezorientowanych. Kiedy można bez problemu korzystać z najnowszej wersji jQuery z gałęzi 2.x?
    Wtedy, gdy tworzymy aplikacje na SmartTV, Windows 8 lub zaawansowane aplikacje JS na których można wymusić dostosowanie się do wymagań producenta (programistów).

    Odpowiedz
    • Awatar
      Michał Załęcki

      19 października 2013 23:48

      Jak najbardziej, jeszcze:
      -Google Chrome add-ons
      -Mozilla XUL apps and Firefox extensions
      -Firefox OS apps
      -Chrome OS apps
      -BlackBerry 10 WebWorks apps
      -PhoneGap/Cordova apps
      -Apple UIWebView class
      -Microsoft WebBrowser control
      -node.js (combined with jsdom or similar)
      źródło: http://blog.jquery.com/2013/04/18/jquery-2-0-released/

      Odpowiedz
      • Awatar
        Comandeer

        20 października 2013 15:31

        ja bym dorzucił do listy jeszcze jedno związane z node: node-webkit (choć obecnie to już bardziej node-blink ;))

        Odpowiedz
  • Awatar
    Comandeer

    19 października 2013 22:38

    Prawda jest taka, że jeśli chciałbym urwać te 15% z jQuery, to po prostu wziąłbym Zepto ;) albo wgl poszedł w nurt zaproponowany przez ShurikenJS. IMO rozwijanie natywnych przy choćby aplikacjach desktopowych jest najlepsze (i najszybsze). chociaż jQuery ma to coś – tą wygodę, którą w natywnych raczej się nie osiągnie

    ja korzystam z jQuery 2 z powodów ideologicznych – stwierdziłem, że nie ma sensu martwić się o IE<9 jeśli główna funkcjonalność opiera się o FileReader API ;)

    co do trybu zgodności w IE: ja raczej polecałbym nagłówek niźli tag: https://github.com/h5bp/html5-boilerplate/blob/master/doc/html.md#x-ua-compatible

    Odpowiedz
    • Awatar
      Michał Załęcki

      19 października 2013 23:55

      Idąc tym tropem, może doczekamy się Zepto 2.0 :P Co do nagłówka to całkowicie się zgodzę. Nie wspomniałem, gdyż wiele osób widząc .htaccess szybko ucieka, a nie to było jakby priorytetem. Dla zainteresowanych, będzie to wyglądało mniej więcej tak:

      Header set X-UA-Compatible „IE=edge”

      Header unset X-UA-Compatible

      Odpowiedz

Zostaw odpowiedź