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.
1 2 3 4 5 6 | <!--[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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!--[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:
1 | <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.
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).
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/
ja bym dorzucił do listy jeszcze jedno związane z node: node-webkit (choć obecnie to już bardziej node-blink ;))
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
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