- Yaklaşık 10 yıl sonra gelen büyük sürüm güncellemesi ile jQuery 4.0.0 resmen yayımlandı
- IE 10 ve altı ile eski tarayıcı desteği sona erdi; kod hafifletildi, modern standartlara uyum güçlendirildi ve çoğu kullanıcı kod değişikliği yapmadan yükseltme yapabilecek
- ES modül tabanlı yapıya geçiş ile Rollup derleme sistemi benimsendi ve modern geliştirme ortamlarıyla uyumluluk sağlandı
- Trusted Types ve CSP desteği eklenerek güvenlik politikalarıyla çakışma en aza indirildi
- Kullanımdan kaldırılmış API'lerin çıkarılması ve slim derlemenin küçültülmesi ile performans ve bakım kolaylığı artırıldı
jQuery 4.0.0'a genel bakış
- jQuery 4.0.0, yaklaşık 10 yıl sonra gelen büyük ölçekli bir ana sürüm olarak, uzun bir geliştirme süreci ve birçok ön sürümün ardından tamamlandı
- Çoğu kullanıcı kod değişikliği yapmadan yükseltebilir
- Önceki sürümlerde biriken eski kodlar ve özel parametreler kaldırıldı
- Yükseltme rehberi ve jQuery Migrate eklentisi birlikte sunularak eski sürümlerden geçiş destekleniyor
- Dağıtım resmi CDN ve npm üzerinden yapılabiliyor; diğer CDN'ler ise kademeli olarak güncellenecek
Tarayıcı desteğindeki değişiklikler
- IE 10 ve altı desteği kaldırıldı; IE 11 desteği ise jQuery 5.0'da aşamalı olarak sonlandırılacak
- Edge Legacy, eski iOS sürümleri (son 3 sürümden daha eski), eski Firefox sürümleri (son 2 sürümden daha eski) ve Android Browser desteği sonlandırıldı
- Eski tarayıcıları desteklemek gerekiyorsa jQuery 3.x sürümünde kalınması öneriliyor
Trusted Types ve CSP uyumluluğu
- TrustedHTML nesnelerini güvenli şekilde işlemek için Trusted Types desteği eklendi
- Asenkron script isteklerinin çoğu `` etiketi tabanlı yapıya dönüştürüldü, böylece CSP hataları önleniyor
"headers" seçeneği kullanıldığında hâlâ XHR kullanılabilir, ancak scriptAttrs kullanımı öneriliyor
ES modüllerine geçiş
- jQuery kaynak kodu AMD'den ES modüllerine tamamen taşındı
- Mevcut RequireJS yerine derleme aracı olarak Rollup benimsendi
- ES modül tabanlı testler ayrıca yürütülüyor
- `` aracılığıyla modern tarayıcılar ve derleme araçlarıyla uyumluluk sağlandı
Deprecated API'lerin kaldırılması
- Uzun süredir önerilmeyen durumdaki API'ler tamamen kaldırıldı
- Kaldırılan fonksiyonlar:
jQuery.isArray, jQuery.parseJSON, jQuery.trim, jQuery.type, jQuery.now, jQuery.isNumeric, jQuery.isFunction, jQuery.isWindow, jQuery.camelCase, jQuery.nodeName, jQuery.cssNumber, jQuery.cssProps, jQuery.fx.interval
- Alternatif olarak
Array.isArray(), JSON.parse(), String.prototype.trim(), Date.now() gibi yerel metotların kullanılması öneriliyor
- IE ile ilgili kodların çıkarılmasıyla birlikte gzip bazında yaklaşık 3KB küçülme sağlandı
Dahili yöntemlerin kaldırılması
- jQuery prototipinde yalnızca dahili kullanım için bulunan push, sort, splice metotları kaldırıldı
$elems.push(elem) yerine [].push.call($elems, elem) kullanılabilir
Odak olaylarının sıralaması değişti
- W3C spesifikasyonuna uygun focus/blur olay sırası ile standartlaştırıldı
- Yeni sıra: blur → focusout → focus → focusin
- Önceki jQuery sırasından farklı olduğu için uyumluluk açısından dikkat gerekiyor
- IE dışında tüm tarayıcılar aynı sırayla çalışıyor
Slim derlemedeki iyileştirmeler
- Deferreds ve Callbacks'in kaldırılmasıyla dosya boyutu yaklaşık 19.5KB'ye (gzip) indirildi
- Çoğu tarayıcı yerel Promise desteği sunduğundan bunların yerine kullanılabilir
- IE11 desteği gerekiyorsa ana derlemeyi ya da Promise polyfill kullanımını tercih etmek öneriliyor
- Slim derleme, Ajax ve animasyonla ilgili modülleri içermediği için yaklaşık 8KB daha küçük
İndirme ve dağıtım
- Resmi CDN ve npm üzerinden indirilebilir
- Kararlı sürüm:
- Slim sürüm:
- npm kurulum komutu:
npm install jquery@4.0.0
Katkıda bulunanlar ve 20. yıl kutlaması
- Çok sayıda açık kaynak katkıcısı yamalar, hata raporları ve testlere katkı sundu
- jQuery'nin 20. yılı kapsamında ekip Dallas'ta yeniden bir araya geldi; kurucu John Resig de Zoom üzerinden katıldı
Başlıca kod değişikliklerinin özeti (Changelog)
- Ajax: ikili veri işleme geliştirildi, CSP hataları önlendi, JSONP hata işleme güçlendirildi
- CSS: `` öğesi boyut hesaplaması düzeltildi, CSS değişkenlerinde boşluk işleme iyileştirildi,
opacity hook'u kaldırıldı
- Core:
AMD → ES modülleri geçişi, DOMParser kullanımı, eski tarayıcı uyumluluk kodlarının çıkarılması
- Event: focus/blur olaylarının yerel işlenmesi,
event.which shim'inin kaldırılması
- Selector: Sizzle entegrasyonu,
:has ile :even/:odd iyileştirmeleri, uniqueSort zincirleme desteği eklendi
- Docs: HTTPS bağlantıları güncellendi, README ve CONTRIBUTING belgeleri düzenlendi
- Release: derleme ve dağıtım süreci otomatikleştirildi,
release-it tabanına taşındı
Özet
- jQuery 4.0.0, modern web standartları ve güvenlik politikalarına uygun yapısal bir yenileme sürümü niteliğinde
- Eski kodların kaldırılması, ES modülerleşme, güvenlik güçlendirmeleri ve hafifleme sayesinde uzun vadeli bakım temeli kuvvetlendirildi
- jQuery ekosisteminin 20. yılını simgeleyen anlamlı bir sürüm olarak değerlendiriliyor
3 yorum
Duygusal bir 20. yıl dönümü. Artık kullanacak pek iş kalmadıysa da, umarım sahada hâlâ faydalı bir araç olarak sevilmeye devam eder.
İnanılmaz dayanıklıymış.. haha
Hacker News yorumları
İlgili bir yazı olarak, eski kod tabanlarında modern framework’ler kullanılamadığında jQuery’yi reaktif şekilde kullanma yöntemini iyi anlatan bir yazı var
Reactive jQuery for Spaghetti-fied Legacy Codebases
jQuery’yi eski sistem nedenleriyle kullanmak gerekiyorsa, Backbone modern framework’lere geçmeden önce iyi bir ara adım olabilir
BackboneJS resmi sitesi, GitHub tag listesi
Aslında aşırı tasarlanmış React kodunun, iyi düzenlenmiş jQuery kodundan daha kötü olduğu zamanlar da olmuştu
React’in kalite çıtasını yükselttiği doğru ama bazen bildiğin araçları yerinde kullanmak daha verimli oluyor
Özellikle Userscript gibi problem alanının küçük olduğu ve build adımının uğraştırdığı durumlarda çok uygun
Aslında jQuery olmadan da sadece
querySelector,addEventListener,innerHTMLile rahatça yapılabilirJoomla CMS içine özel bir arama frontend’ini zorla gömmek zorunda kalmıştım ve oldukça iyi çalışmıştı
Reactive Mastro'da yaptığımız şey de tam olarak bu
jQuery hâlâ en sevdiğim kütüphanelerden biri
Kariyerimi şekillendiren araç olduğu için ona karşı hep ayrı bir sevgim var
jQuery + jQuery UI + eklentiler + AI kombinasyonunun müthiş bir potansiyeli olabilir
HTMX konuşulduğunda aklıma hep “bu zaten jQuery ile üç satırda yapılmaz mı?” düşüncesi geliyor
Sonuçta jQuery hep sorun çözdü ve önemli olan da bu
.load()metodundan ilham alan intercooler.js’ten evrildijQuery.load() dokümantasyonu
Performans çalışması yaparken keşfetmiştim; jQuery’ye gerçekten büyük saygı duyuyorum
$()seçici arayüzünün zarafeti hâlâ eşsizdiPerformans farkı da önceden hesaplama ile telafi edilebilir gibi görünüyor
Basit kalırken yine de SPA benzeri bir his verebiliyor
Good ol’ jQuery, gerçekten minnet duyulası bir şeydi
jQuery’nin hâlâ korunup güncelleniyor olduğunu görmek sevindirici
Ama bu aynı zamanda React’in de 2060’a kadar yaşayabileceği anlamına geliyor, bu da biraz hüzünlü
Eski callback cehennemi günlerini düşününce bugünkü hâl neredeyse bir rüya gibi
2000’ler ve 2010’larda SPA framework’lerinin yaygın olmadığı dönemde ben de web geliştirmeyi jQuery ile öğrendim
O zaman yaptığım şeylerin önemli bir kısmı muhtemelen hâlâ çalışıyordur
jQuery ekibine teşekkürlerimi iletiyorum
jQuery 4.0 sürümüne katkı veren herkesi tebrik ederim
Daha yapısal bir yaklaşım isteyenler için JsViews adında reaktif bir şablon sistemi var
Eski ve stabil ama modern framework’ler kadar ilgi görmedi
Ben şahsen cheerio ve alpine.js gibi modern jQuery tarzlarını seviyorum
cheerio.js.org, alpinejs.dev
Yalnız site tasarımı fazla eski göründüğü için benimsenmesi düşük kalıyor gibi
Yine de hızlı yükleniyor ve hafifliği etkileyici
jsrender.min.js yalnızca 12.82kB
İnanması zor ama jQuery 4.0 hâlâ IE11 desteği sunuyor
Bunun jQuery 5.0’da nihayet kaldırılması planlanıyor
İlgili PR, issue
3.0’ın 10 yıl önce çıktığını düşününce oldukça şaşırtıcı
Bu kullanıcıları ve ürünleri desteklemeleri takdire değer
Hâlâ eski sistemlerle çalışan okul bilgisayar laboratuvarları çok sayıda mevcut
jQuery’nin upgrade tool için harcanan emek gerçekten hayranlık uyandırıcı
jQuery’nin zincirleme söz dizimini hâlâ seviyorum
15 yıl önce Fransızca bir jQuery eğitimi yazmıştım ve çok görüntülenmişti
Umarım jQuery’nin yayılmasına ben de az da olsa katkıda bulunmuşumdur