Kas yra Oxc ir kodėl visi apie jį kalba
Jei sekate JavaScript ekosistemos naujienas, tikriausiai pastebėjote, kad pastaraisiais metais vis dažniau pasigirsta kalbų apie įrankius, parašytus Rust kalba. Ir ne be reikalo – Oxc (The Oxidation Compiler) yra vienas iš ambicingiausių projektų šioje srityje. Tai ne tiesiog dar vienas JavaScript įrankis, o visapusiška įrankių grandinė (toolchain), kuri žada pakeisti tai, kaip mes kuriame, testuojame ir optimizuojame JavaScript kodą.
Projekto pavadinimas „Oxidation” yra žaidimas žodžiais – „oxidation” angliškai reiškia oksidaciją arba rūdijimą, o Rust pavadinimas taip pat reiškia rūdis. Šis projektas gimė iš nusivylimo esamų JavaScript įrankių našumu ir noro sukurti kažką iš esmės greitesnio. Ir kai sakau „greitesnio”, nekalbu apie 10-20% pagerinimą – kalbame apie kartais net 20-100 kartų spartesnį veikimą tam tikrose operacijose.
Kodėl Rust JavaScript ekosistemoje
Galite paklausti – kodėl iš viso reikia perrašinėti JavaScript įrankius Rust kalba? Argi JavaScript įrankiai, parašyti JavaScript, nėra pakankamai geri? Atsakymas slypi našumo ir patikimumo derinime, kurį siūlo Rust.
JavaScript yra interpretuojama kalba su automatinio atminties valdymo mechanizmu (garbage collection). Tai puiku kuriant aplikacijas, bet ne taip gerai, kai reikia apdoroti milžiniškas kodo bazes ar atlikti sudėtingas transformacijas milijonus kartų. Rust, kita vertus, yra kompiliuojama kalba be garbage collection, kuri leidžia tiesiogiai valdyti atmintį ir pasiekti beveik C/C++ lygio našumą, tačiau su modernia tipo sistema ir saugumu.
Pažvelkime į realų pavyzdį: kai naudojate Babel transformuoti savo kodą, jis turi išanalizuoti visą jūsų JavaScript failą į abstrakčią sintaksės medį (AST), atlikti transformacijas ir vėl sugeneruoti kodą. Dideliems projektams tai gali užtrukti kelias sekundes ar net minutes. Oxc tą patį darbą atlieka per dešimtadalius sekundės.
Kas sudaro Oxc įrankių grandinę
Oxc nėra vienas įrankis – tai visapusiška ekosistema, kuri apima visus pagrindinius JavaScript kūrimo proceso etapus. Štai pagrindiniai komponentai:
Oxc Parser – tai greitausias JavaScript ir TypeScript parseris rinkoje. Jis palaiko visas naujausias ECMAScript funkcijas ir TypeScript sintaksę. Parseris yra pagrindas visam kitam – jei jis lėtas, viskas kita bus lėta.
Oxc Transformer – tai Babel alternatyva, kuri transformuoja modernų JavaScript/TypeScript kodą į senesnes versijas, palaikančias platesnę naršyklių bazę. Jei dirbate su React, TypeScript ar naudojate naujausias ES2024 funkcijas, transformeris jas paverčia kodu, kurį supranta net senesnės naršyklės.
Oxc Linter – čia tampa įdomu. Tai ne tiesiog ESLint alternatyva, o fundamentaliai kitoks požiūris į linting’ą. Kadangi Oxc Linter dalijasi ta pačia AST struktūra su kitais Oxc komponentais, jis gali būti integruotas tiesiogiai į jūsų build procesą be papildomo našumo kaštų.
Oxc Minifier – kodo minifikavimas yra kritiškai svarbus production aplikacijoms. Oxc minifier konkuruoja su tokiais įrankiais kaip Terser ir esbuild, dažnai juos pranokdamas tiek greičiu, tiek galutinio kodo dydžiu.
Oxc Resolver – modulių sprendimo sistema, kuri supranta Node.js, TypeScript ir kitų sistemų modulių sprendimo logiką. Tai gali atrodyti kaip smulkmena, bet teisingas modulių sprendimas yra kritiškai svarbus bundler’iams ir kitoms įrankiams.
Kaip Oxc veikia praktikoje
Teorija yra gražu, bet kaip tai atrodo realiame projekte? Pabandykime integruoti Oxc į tipinį JavaScript projektą.
Pirmiausiai, galite pradėti naudoti Oxc parseris per jo Node.js bindings. Tai atrodo maždaug taip:
„`javascript
import oxc from ‘oxc-parser’;
const sourceCode = `
const greeting: string = „Hello, World!”;
console.log(greeting);
`;
const ast = oxc.parseSync(sourceCode, { sourceType: ‘module’ });
„`
Šis paprastas kodas išanalizuoja TypeScript kodą ir grąžina AST struktūrą. Jei tai darytumėte su tradiciniu TypeScript parseriu, procesas užtruktų gerokai ilgiau, ypač dideliems failams.
Oxc linter’į galite naudoti tiesiogiai iš komandinės eilutės. Jei turite projektą su tūkstančiais failų, skirtumas tampa akivaizdus:
„`bash
npx oxlint src/
„`
Tai išanalizuos visus failus jūsų `src` direktorijoje ir praneš apie problemas per sekundes dalį. Palyginkite tai su ESLint, kuris dideliam projektui gali užtrukti 30 sekundžių ar daugiau.
Našumo palyginimas su esamais įrankiais
Skaičiai kalba patys už save, bet svarbu suprasti kontekstą. Oxc komanda reguliariai skelbia benchmark’us, palygindama savo įrankius su populiariausiomis alternatyvomis.
Parsing’o srityje Oxc yra maždaug 3-4 kartus greitesnis už @babel/parser ir 2-3 kartus greitesnis už SWC (kitą Rust pagrįstą įrankį). Tai reiškia, kad projektas su 100,000 eilučių kodo, kuris anksčiau būtų buvęs išanalizuotas per 2 sekundes, dabar užtrunka 0.5 sekundės.
Linting’o srityje skirtumas dar dramatiškesnis. Oxlint gali būti 50-100 kartų greitesnis už ESLint dideliems projektams. Tai ne todėl, kad ESLint būtų blogai parašytas – tiesiog JavaScript kaip platforma turi fundamentalius našumo apribojimus, kurių Rust neturi.
Transformavimo srityje Oxc konkuruoja su Babel ir SWC. Nors SWC taip pat parašytas Rust, Oxc dažnai būna greitesnis dėl geriau optimizuotos architektūros ir modernesnių algoritmų.
Integracijos su esamais įrankiais
Vienas iš didžiausių iššūkių bet kuriam naujam įrankiui yra integracijos su esama ekosistema. Negalite tiesiog pasakyti žmonėms „išmeskite viską ir pradėkite naudoti mūsų įrankį”. Oxc komanda tai supranta ir aktyviai dirba prie integracijų.
Jau dabar galite naudoti Oxc su Rollup per specialų plugin’ą. Webpack integracija taip pat yra plėtojama. Vite, kuris jau naudoja esbuild kai kurioms operacijoms, taip pat žiūri Oxc pusėn kaip potencialią alternatyvą tam tikriems komponentams.
TypeScript projektuose galite naudoti Oxc kaip greitesnę alternatyvą TypeScript kompiliatoriui tam tikroms užduotims. Nors Oxc neatlieka tipo tikrinimo (type checking), jis puikiai tinka transpiliavimui – paversti TypeScript į JavaScript be tipo informacijos.
Jei naudojate Vitest ar Jest testavimui, galite sukonfigūruoti Oxc kaip transformerį. Tai gali žymiai pagreitinti testų paleidimą, ypač jei turite didelę testų bazę.
Kas dar tobulintina ir ateities planai
Nors Oxc atrodo kaip stebuklinga kulka, svarbu būti realistams. Projektas vis dar yra aktyvios plėtros stadijoje, ir kai kurie komponentai nėra visiškai subrendę production naudojimui.
Linter’is, nors ir labai greitas, dar nepalaiko visų ESLint taisyklių. Oxc komanda prioritizuoja populiariausias taisykles, bet jei jūsų projektas remiasi specifinėmis custom ESLint taisyklėmis ar plugin’ais, gali tekti palaukti. Gera žinia yra ta, kad kiekvieną mėnesį pridedama vis daugiau taisyklių.
Minifier’is taip pat dar neturi visų Terser funkcijų. Kai kurie edge case’ai vis dar gali būti apdorojami ne optimaliai. Tačiau kasdieniam naudojimui daugumai projektų jis jau yra daugiau nei pakankamas.
Dokumentacija taip pat galėtų būti išsamesnė. Kadangi projektas vystosi greitai, kartais dokumentacija atsilieka nuo kodo. Tačiau bendruomenė yra aktyvi, ir GitHub issues dažnai yra geriausias šaltinis informacijai apie specifinius klausimus.
Komanda dirba prie pilno bundler’io, kuris konkuruotų su Webpack, Rollup ir esbuild. Tai būtų game-changer, nes leistų naudoti vieną įrankių grandinę visam build procesui – nuo parsing’o iki galutinio bundle’o sukūrimo.
Ar verta pereiti prie Oxc jau dabar
Tai klausimas, kurį daugelis klausia. Atsakymas, kaip dažnai būna, yra „priklauso”.
Jei kuriate naują projektą ir norite eksperimentuoti su naujausiais įrankiais, Oxc yra puikus pasirinkimas. Galite pradėti nuo linter’io – tai mažiausio rizikos būdas išbandyti Oxc, nes linting’as neturi įtakos jūsų production kodui. Tiesiog paleiskite `npx oxlint` vietoj ESLint ir pamatysite skirtumą.
Dideliems projektams, kur build laikas yra problema, verta pažiūrėti į Oxc transformer’į. Jei jūsų CI/CD pipeline’as leidžia 10 minučių build’ams, o pusė to laiko eina transformacijoms, Oxc gali sumažinti tai iki kelių minučių.
Tačiau jei turite stabilų, veikiantį projektą su sudėtinga ESLint konfigūracija ir custom plugin’ais, galbūt dar per anksti. Palaukite, kol Oxc subręs šiek tiek labiau ir pridės daugiau funkcionalumo.
Monorepo projektuose, kur turite šimtus ar tūkstančius failų, Oxc našumo pranašumai tampa ypač akivaizdūs. Čia net dalinė integracija – pavyzdžiui, naudojant tik linter’į – gali sutaupyti daug laiko.
Svarbu suprasti, kad Oxc nėra „viskas arba nieko” sprendimas. Galite integruoti atskirus komponentus laipsniškai, išbandyti juos ir pereiti prie pilnesnės integracijos, kai pasitikėjimas augs.
Bendruomenė ir ekosistemos augimas
Vienas iš svarbiausių bet kurio open-source projekto aspektų yra bendruomenė. Oxc turi aktyvią ir augančią bendruomenę, kuri prisideda prie kodo, dokumentacijos ir palaikymo.
GitHub repository yra labai gyvas – kasdien pridedami nauji commit’ai, sprendžiami issue’ai ir peržiūrimi pull request’ai. Tai geras ženklas, rodantis, kad projektas nėra vieno žmogaus hobis, o rimtas kolektyvinis darbas.
Discord serveris yra vieta, kur galite užduoti klausimus ir gauti atsakymus tiesiogiai iš core developer’ių. Tai retai pasitaikanti galimybė – daugelis didelių projektų tampa per dideli tokiam tiesioginiam bendravimui.
Įmonės taip pat pradeda domėtis Oxc. Kai kurios jau naudoja jį production’e, o kitos eksperimentuoja su juo vidiniuose projektuose. Tai svarbu, nes komercinė parama dažnai reiškia stabilesnę plėtrą ir geresnę palaikymą.
Ekosistema aplink Oxc taip pat auga. Atsiranda plugin’ų, integracijų su populiariais įrankiais ir tutorial’ų. Tai rodo, kad projektas juda teisinga linkme ir pritraukia ne tik entuziastus, bet ir rimtus developer’ius.
Ką tai reiškia JavaScript ateičiai
Oxc yra dalis didesnės tendencijos – JavaScript įrankių perrašymo greitesnėmis kalbomis. Matėme tai su esbuild (Go), SWC (Rust), ir dabar Oxc (taip pat Rust). Ši tendencija nėra atsitiktinė – ji atspindi realią problemą, kad JavaScript projektai tampa vis didesni ir sudėtingesni.
Ateityje galime tikėtis, kad daugelis įrankių, kuriuos naudojame kasdien, bus perrašyti arba bent jau turės Rust alternatyvas. Tai nereiškia, kad JavaScript įrankiai išnyks – jie vis dar bus naudojami ten, kur našumas nėra kritinis. Bet ten, kur kiekviena milisekundė svarbi, Rust įrankiai dominuos.
Oxc taip pat rodo, kad įmanoma sukurti ne tik pavienius greitus įrankius, bet ir visapusišką įrankių grandinę, kuri dirba kartu. Tai svarbu, nes daug našumo prarandama perduodant duomenis tarp skirtingų įrankių. Kai viskas veikia vienoje ekosistemoje, galima optimizuoti visą pipeline’ą.
Galiausiai, Oxc ir panašūs projektai kelia kartelę visai industrijai. Net jei nenaudosite Oxc, jūsų esami įrankiai turės tapti greitesni, kad išliktų konkurencingi. Tai reiškia, kad visi laimime – ar naudojame Oxc, ar ne.
Žvelgiant į ateitį, galime tikėtis, kad Oxc taps vienu iš pagrindinių JavaScript ekosistemos įrankių. Galbūt ne iš karto, galbūt ne visiems projektams, bet jo įtaka jau jaučiama. Ir tai tik pradžia – projektas aktyviai vystomas, pridedamos naujos funkcijos, ir bendruomenė auga. Jei dar neišbandėte Oxc, dabar puikus laikas tai padaryti. Pradėkite nuo ko nors paprasto – pavyzdžiui, paleiskite linter’į savo projekte ir pamatysite, kaip greitai jis veikia. Kas žino, galbūt tai bus pirmasis žingsnis į visiškai naują build proceso patirtį.
