jQuery 4.0.0: ką realiai reiškia pirmas didelis atnaujinimas per beveik dešimtmetį
2026-aisiais jQuery sukako 20 metų: 2006-01-14 John Resig pristatė biblioteką BarCamp renginyje Niujorke, o dabar jQuery komanda paskelbė galutinę jQuery 4.0.0 versiją. Tai pirmas „major“ leidimas per beveik 10 metų – su aiškia kryptimi: daugiau modernių standartų, mažiau istorinių kompromisų, mažesnis kodas ir švaresnis viešas API.
Svarbiausia praktinė žinutė: tai yra „breaking changes“ turintis atnaujinimas, todėl prieš keldamas į produkciją praeik per oficialų upgrade guide ir pasinaudok jQuery Migrate plugin (įrankiu, kuris padeda aptikti/užglaistyti nesuderinamumus). Komanda taip pat prašo: jei rasi problemų – registruok jas per jQuery issue tracker.
Kur gauti jQuery 4.0.0 (CDN, npm, slim)
Leidimas publikuojamas oficialiame jQuery CDN ir per npm. Trečiųjų šalių CDN paprastai įsikelia kiek vėliau (jų grafiko jQuery komanda nekontroliuoja), todėl greičiausiam startui logiška laikinai naudoti oficialų CDN.
- Pilna versija (unminified): https://code.jquery.com/jquery-4.0.0.js
- Pilna versija (minified): https://code.jquery.com/jquery-4.0.0.min.js
- Slim build (unminified): https://code.jquery.com/jquery-4.0.0.slim.js
- Slim build (minified): https://code.jquery.com/jquery-4.0.0.slim.min.js
- npm:
npm install jquery@4.0.0 - Bendra atsisiuntimo informacija: https://jquery.com/download/
Kodėl šis leidimas „laužo“: sąmoningas „legacy“ valymas
Didžioji dalis nesuderinamumų atsirado ne šiaip sau. Komanda pagaliau galėjo padaryti pokyčius, kuriuos metų metus buvo neįmanoma įdėti į „patch“ ar „minor“: išmesta pasenusi logika, pašalinti anksčiau depreikuoti API, išvalyti viešų funkcijų vidiniai (nedokumentuoti) parametrai, ir atsisakyta kai kurių „magical“ elgsenų, kurios buvo per daug komplikuotos ir brangios palaikyti.
Naršyklių palaikymas: IE<11 – viskas, IE11 – dar ne (kol kas)
jQuery 4.0 oficialiai nebesupportina IE 10 ir senesnių. Natūralus klausimas – kodėl nepašalintas IE11? Atsakymas paprastas: palaikymas bus nuimamas etapais, o kitas žingsnis planuojamas jQuery 5.0 (tai nurodyta per nuorodą į planuojamą pakeitimą: https://github.com/jquery/jquery/pull/5077). 4.0 etape išmetamas būtent kodas, skirtas IE versijoms senesnėms nei 11.
Kartu nustota taikyti ir kitų itin senų naršyklių palaikymą: Edge Legacy, iOS versijos senesnės nei paskutinės 3, Firefox senesnės nei paskutinės 2 (išskyrus Firefox ESR), bei Android Browser. Komanda pabrėžia, kad daugumai projektų papildomų veiksmų nereikės. Jei tau vis dar būtina palaikyti šiuos naršyklių variantus – praktiškas patarimas vienas: lik su jQuery 3.x.
Saugumas ir politika: Trusted Types + CSP draugiškesnis script transportas
jQuery 4.0 įsiveda palaikymą Trusted Types – tai naršyklių mechanizmas, kuris padeda mažinti XSS riziką ir geriau integruojasi su griežtesnėmis saugumo politikomis. Konkrečiai: HTML, supakuotas į TrustedHTML (MDN: https://developer.mozilla.org/en-US/docs/Web/API/TrustedHTML), gali būti naudojamas kaip įvestis jQuery DOM manipuliavimo metoduose taip, kad nepažeistų require-trusted-types-for Content Security Policy (CSP) direktyvos.
Šalia to buvo sutvarkytas ir script užkrovimas per AJAX: nors kai kurios užklausos jau anksčiau naudojo <script> tag’ą atributams (pvz., crossdomain) išlaikyti, dabar komanda daugumą asinchroninių script užklausų perjungė į <script> tag’us. Tikslas – išvengti CSP klaidų, kurios dažnai kyla naudojant inline script’us.
Svarbi praktinė detalė apie headers
Vis dar yra keli atvejai, kai asinchroniniam script request’ui naudojamas XHR, pvz., kai perduodi "headers" opciją. Komandos rekomendacija: vietoje to naudok scriptAttrs.
Vidus modernėja: jQuery šaltinis migruotas į ES modules
Vienas didžiausių architektūrinių pokyčių – jQuery šaltinis main šakoje perkeliamas nuo AMD (kodėl AMD: https://requirejs.org/docs/whyamd.html) prie ES modules. jQuery šaltinis ir anksčiau buvo publikuojamas per npm ir GitHub, bet jo nebuvo galima tiesiogiai importuoti kaip modulių be RequireJS (https://requirejs.org/), nes istoriškai tai buvo pasirinktas build įrankis.
Dabar paketavimui naudojamas Rollup (https://rollupjs.org/introduction/), o testai ES moduliams vykdomi atskirai. Rezultatas: jQuery geriau įsipaišo į šiuolaikinius build tool’us, dev workflow’us ir net į „nativų“ naršyklinį scenarijų su <script type=module>.
Pašalinti depreikuoti API: ką išmetė ir kuo keisti
Kadangi tai „major“ leidimas, jQuery 4.0 galutinai atsisako funkcijų, kurios buvo depreikuotos per kelias ankstesnes versijas. Dalis jų buvo planuota tik vidiniam naudojimui, o dalis šiandien turi natūralius atitikmenis visose jQuery 4.0 palaikomose naršyklėse.
Pašalintos funkcijos:
jQuery.isArrayjQuery.parseJSONjQuery.trimjQuery.typejQuery.nowjQuery.isNumericjQuery.isFunctionjQuery.isWindowjQuery.camelCasejQuery.nodeNamejQuery.cssNumberjQuery.cssPropsjQuery.fx.interval
Vietoje jų siūloma pereiti prie „native“ atitikmenų, pvz.: Array.isArray(), JSON.parse(), String.prototype.trim(), Date.now() ir pan.
Įdomus „bonus“: vien šių API pašalinimas kartu su senų IE palaikymo kodo išmetimu sumažino bibliotekos dydį daugiau nei 3k baitų gzipped.
jQuery prototype apsivalymas: push/sort/splice išmesti
Ilgą laiką jQuery prototype turėjo Array metodus, kurie elgėsi ne taip, kaip kiti jQuery metodai, ir realiai buvo skirti tik vidui. Kalba apie push, sort ir splice. jQuery 4.0 jie pašalinti iš jQuery prototype.
Jei kažkur seniau buvai prisirišęs prie tokios konstrukcijos kaip $elems.push( elem ), komanda siūlo pakeitimą į standartinį Array proto kvietimą:
// jQuery 3.x (veikė, bet buvo bloga praktika)
$elems.push(elem);
// jQuery 4.x (rekomenduojamas pakaitalas)
[].push.call($elems, elem);Focus/blur įvykių tvarka: dabar pagal W3C (ir tai gali užkliūti)
Vienas nemalonesnių „breaking“ pokyčių – focus/blur event’ų tvarka. Istoriškai naršyklės nesutarė dėl focusin, focusout, focus, blur eiliškumo, todėl jQuery kadaise pasirinko nuoseklią (bet ne visada sutampančią su standartais) tvarką.
Dabar, naujausios naršyklės, kurias palaiko jQuery 4.0, suvienodėjo… bet jų tvarka skiriasi nuo jQuery ankstesnio pasirinkimo. Nuo jQuery 4.0 biblioteka nebeperrašo native elgsenos. Rezultatas: visos naršyklės, išskyrus IE, seka dabartinę W3C specifikaciją:
- blur
- focusout
- focus
- focusin
Ankstesnė jQuery tvarka buvo: focusout, blur, focusin, focus. Paradoksas: vienintelė naršyklė, kuri realiai laikėsi senos W3C spec (iki jos atnaujinimo 2023 m.), buvo Internet Explorer.
Slim build dar plonesnis: nebėra Deferreds ir Callbacks
jQuery 4.0.0 „slim“ build’as tapo dar mažesnis – iš jo pašalinti Deferreds ir Callbacks moduliai. Dabar jis apie 19.5k baitų gzipped. Pagrindinė logika: Deferreds seniai palaikė Promises A+ (https://promisesaplus.com/), o šiandien „native“ Promise’iai daugeliu atvejų užtenka.
Svarbi išlyga – „native“ Promise’ai yra visose jQuery palaikomose naršyklėse išskyrus IE11. Deferreds turi ir papildomų galimybių, kurių Promise’ai neturi, bet daugumą tipinių scenarijų galima perrašyti į Promise metodus. Jei tau būtinas IE11, komanda rekomenduoja naudoti pilną build’ą arba pridėti polyfill’ą Promise’ams.
Beje, jQuery komanda pabrėžia, kad jQuery dydis šiandien retai būna reali performance problema, bet slim build vis tiek yra apie 8k gzipped baitų mažesnis už pilną variantą.
Trumpai apie pokyčių apimtį: pilnas changelog ir sritys
Jei migruoji rimtesnę codebase’ą (ypač su įdomesniu AJAX, selektoriais ar CSP), verta perbėgti pilną pakeitimų sąrašą. Oficialus palyginimas: Full changelog: 4.0.0.
Changelog’e pokyčiai skirstomi į sritis: Ajax, Attributes, CSS, Core, Data, Deferred, Deprecated, Dimensions, Docs, Effect/Effects, Event, Manipulation, Offset, Release, Selector, Support, Traversing. Tai ne vien kosmetika – pvz., Ajax dalyje yra pakeitimų dėl binary data/FormData, JSONP elgsenos, script vykdymo sąlygų ir CSP klaidų prevencijos; Event dalyje – focus/blur, event.which shim pašalinimas ir kt.; Core dalyje – $.parseHTML perėjimas prie DOMParser, ESM/CommonJS suderinamumo tvarkymai ir pan.
Reunion ir 20-mečio momentas
Smagus kontekstas: jQuery bendruomenė 20-mečio proga susitiko Dalase, o John Resig prisijungė per Zoom. Leidimas paskelbtas būtent tuo metu, kai komanda buvo kartu.

Padėkos prisidėjusiems
Šiame leidime dalyvavo daug žmonių – nuo pataisų ir bug reportų iki testavimo. Oficialiai paminėti: Alex, Ahmed S. El-Afifi, fecore1, Dallas Fraser, Richard Gibson, Michał Gołębiowski-Owczarek, Pierre Grimaud, Gabriela Gutierrez, Jonathan, Necmettin Karakaya, Anders Kaseorg, Wonseop Kim, Simon Legner, Shashanka Nataraj, Pat O’Callaghan, Christian Oliff, Dimitri Papadopoulos Orfanos, Wonhyoung Park, Bruno PIERRE, Baoshuo Ren, Beatriz Rezener, Sean Robinson, Ed Sanders, Timo Tijhof, Tom, Christian Wenz, ygj6 ir visa jQuery komanda.
Greita migravimo „mintinė“ (ką pasitikrinti prieš upgrade)
- Jei tavo auditorijoje dar yra IE10 ar senesni – jQuery 4.0 tau netinka (lik su 3.x).
- Jei turi griežtą CSP (ypač su
require-trusted-types-for) – įvertink Trusted Types pokyčius ir script transporto elgseną. - Jei tavo kode dar yra
jQuery.isArray,jQuery.parseJSON,jQuery.trim,jQuery.nowir panašūs „deprecated“ helper’iai – perrašyk į native atitikmenis. - Jei kažkur netyčia naudoji
$elems.push/sort/splice– persirašyk įArray.prototype.*.call(...). - Jei aplikacijoje remiesi focus/blur event’ų eiliškumu – patestuok formų validacijas, fokusavimo logiką, modalus ir pan.
- Jei naudoji slim build: įsivertink, ar tau nereikia Deferreds/Callbacks, ir ką darysi dėl Promise’ų IE11 atveju (pilnas build arba polyfill).
- Prieš produkciją praeik oficialų upgrade guide: https://jquery.com/upgrade-guide/4.0/ ir, jei reikia, įsijunk jQuery Migrate: https://github.com/jquery/jquery-migrate/.
Mantas Jonaitis
Vyresnysis programinės įrangos architektas su 25+ metų patirtimi. Pasenusių sistemų modernizavimas ir įmonių architektūra yra mano specializacija. Patirtis išmokė kantrybės.
Visi įrašai