Pereiti prie turinio
jQuery 4.0.0: ką realiai reiškia pirmas didelis atnaujinimas per beveik dešimtmetį
Mantas Jonaitis
Mantas Jonaitis 2026 m. January 19 d. · 2 min. skaitymo

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.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

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ą:

  1. blur
  2. focusout
  3. focus
  4. 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.

jQuery komandos ir bendruomenės susitikimo nuotrauka per 20-mečio reunion Dalase
jQuery 20-mečio reunion Dalase (nuotrauka iš oficialaus jQuery blogo įrašo). — Forrás: blog.jquery.com

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.now ir 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

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

Prisijunkite prie HelloWP bendruomenės!

Bendraukite su mumis apie WordPress, žiniatinklio kūrimą ir dalinkitės patirtimi su kitais kūrėjais.

- nariai
- prisijungę
Prisijungti

Mes naudojame slapukus, kad pagerintume jūsų patirtį. Tęsdami sutinkate su mūsų Slapukų politika.