Rodyti HN: Rev-dep – 20 kartų greitesnė knip.dev alternatyvi versija Go
komentarai
Mewayz Team
Editorial Team
Paslėptas mokestis kiekvienai augančiai programinės įrangos komandai
Kiekvienas pakankamai ilgai gyvuojantis programinės įrangos projektas galiausiai susiduria su ta pačia ramia krize: kodų bazė pradeda augti greičiau, nei komanda gali ją suprasti. Funkcijos, kurių niekas neskambina, eksportuojami, sukurti funkcijai, kuri buvo pristatyta 2022 m. ir tyliai nebenaudojama, komponentai, kurie yra diske, bet niekada nepasiekia naršyklės. Tai ne aplaidumas – tai fizika. Komandos juda greitai, reikalavimai keičiasi, o entropija negailestinga. Klausimas ne tas, ar jūsų kodų bazėje yra miręs kodas. Kyla klausimas, kiek tai jums šiuo metu kainuoja.
Remiantis „Google“ inžinierių produktyvumo komandos tyrimais, kūrėjai vidutiniškai 42 % savo kodavimo laiko praleidžia skaitydami ir suprasdami esamą kodą, o ne rašydami naujas funkcijas. Kai tame esamame kode yra tūkstančiai eilučių, kurios nebėra jokios paskirties, šis procentas dar labiau pakrypsta. Dešimties inžinierių komandai tai reiškia, kad keturi visą darbo dieną dirbantys darbuotojai nedaro nieko produktyvaus – ne todėl, kad yra tingūs, o todėl, kad jų įrankiai neatsilieka nuo programinės įrangos senėjimo greičio.
Štai kodėl naujoji kūrėjų įrankių banga, sukurta tokiomis sistemų kalbomis kaip „Go“ ir „Rust“, inžinerijos sluoksniuose sukelia tikrą jaudulį. Tokie įrankiai kaip Rev-dep – atvirkštinės priklausomybės analizatorius, veikiantis 20 kartų greičiau nei populiarus JavaScript pagrįstas knip.dev – yra daugiau nei tik laipsniškas patobulinimas. Jie rodo, kad reikia iš esmės permąstyti, kaip įtaisome patį kūrimo procesą.
Ką iš tikrųjų veikia atvirkštinės priklausomybės analizė
Prieš suprantant, kodėl greitis yra toks svarbus, padeda suprasti, ką iš tikrųjų veikia priklausomybės analizės įrankiai. „JavaScript“ arba „TypeScript“ projekte kiekvienas failas importuojamas iš kitų failų. Kiekviena funkcija, klasė ar konstanta, kuri eksportuojama iš modulio, sukuria potencialią priklausomybę – tai, kuo gali pasikliauti kitos kodų bazės dalys. „Atvirkštinė“ priklausomybės analizė apverčia šią perspektyvą: užuot klausęs „nuo ko priklauso šis modulis“, ji klausia „kas priklauso nuo šio modulio?“
Jei atsakymas į antrąjį klausimą yra „nieko“, radote neveikiantį kodą. Eksportas, kurio niekas neimportuoja, yra atliekos. Funkcija, kurios niekas nešaukia, yra techninė skola su mėnesio palūkanų norma. Atvirkštinės priklausomybės įrankiai sistemingai pateikia visą projekto grafiką, nustato kiekvieną ryšį tarp modulių ir pateikia mazgus, kurie neturi įeinančių ryšių. Rezultatas – tikslus visų kodų bazėje esančių dalykų, kuriuos galima saugiai pašalinti, patikrinimas.
Knip.dev tai puikiai atlieka „JavaScript“ ir „TypeScript“ projektuose ir yra plačiai gerbiama bendruomenėje. Tačiau jis parašytas JavaScript, o tai reiškia, kad jis veikia Node.js, o tai reiškia, kad jis paveldi visus Node vienos gijos veikimo apribojimus, kai atlieka didelio masto failų sistemos perėjimą ir simbolių analizę. Projektui su 500 failų tai tinka. Projekto, kuriame yra 50 000 failų – tokio monorepo, kuris tiekia realius įmonės SaaS produktus – analizė gali užtrukti kelias minutes. O minutės, kuriomis veikia šiuolaikiniai CI/CD dujotiekiai, yra pertrauka.
Kodėl Go pakeičia skaičiavimą
Go nuo pat pradžių buvo sukurtas būtent tokiam darbo krūviui, kokio reikalauja priklausomybės analizė: greitas failų įvestis/išvestis, puikūs lygiagretumo primityvai ir minimalios vykdymo trukmės išlaidos. Kai Node.js vienu metu apdoroja vieną užduotį vienoje gijoje ir pasikliauja atgaliniais skambučiais bei pažadais padirbti lygiagretumą, Go gali sukurti tūkstančius gorutinų, kurios iš tikrųjų vykdomos lygiagrečiai visuose turimuose procesoriaus branduoliuose. Atliekant užduotį, kuri apima šimtų failų skaitymą, jų AST analizavimą ir simbolių ryšių grafiko sudarymą, šis architektūrinis skirtumas tiesiogiai paverčiamas sieninio laikrodžio veikimu.
20 kartų didesnis pagreitis, apie kurį teigia Rev-dep, nėra magija – taip nutinka, kai tinkama kalba derinama su tinkama problema. „Go“ sudarytas pobūdis taip pat reiškia, kad JIT apšilimo bausmės nėra. Nuo šalto paleidimo iki visiškos analizės „Go“ dvejetainis failas veikia beveik didžiausiu našumu. Praktinė reikšmė yra ta, kad analizė, kuri užtruko 90 sekundžių naudojant mazgų pagrįstą įrankį, gali būti atlikta per mažiau nei 5 sekundes naudojant gerai įdiegtą „Go“ ekvivalentą. Tai yra skirtumas tarp patikrinimo, kurį kūrėjai praleidžia, nes jis „užtrunka amžinai“, ir patikrinimo, kuris vykdomas kiekvieną kartą, kai niekas nepastebi papildomų išlaidų.
"Geriausias kūrėjo įrankis yra tas, kuris išeina iš kelio. Jei jūsų analizės rinkinys prideda tris minutes prie kiekvieno CI dujotiekio, kūrėjai ras būdų, kaip jį praleisti. Greitis nėra malonus dalykas – tai būtina sąlyga norint jį naudoti."
Kodų bazės higienos verslo pavyzdys
Negyvas kodas yra ne tik kūrėjo estetikos problema – jis turi konkrečių verslo pasekmių, kurios ilgainiui didėja. Apsvarstykite, kiek išpūstos kodų bazės iš tikrųjų kainuoja organizacijoms:
- Ilgesnis kūrimo laikas, dėl kurio sulėtėja diegimo procesas ir sumažėja leidimų, kuriuos komanda gali saugiai išsiųsti per savaitę, skaičius.
- Didesnė pažinimo apkrova besimokantiems inžinieriams, kurie turi praleisti savaites, kad atskirtų aktyvius modelius nuo apleistų.
- Padidėjęs rinkinio dydis, kuris kenkia programos našumui, ypač žiniatinklio programose, kur kiekvienas kilobaitas turi įtakos įkėlimo laikui ir konversijų rodikliams
- Saugumo paviršiaus išplėtimas – negyvas kodas, kuriame vis dar yra priklausomybių, vis dar yra tų paketų pažeidžiamumo vektorius
- Testavimo rinkinio išsipūtimas, kai pašalintų funkcijų testai ir toliau vykdomi, sunaudoja CI minutes ir kartais sutrinka dėl painiavos
- Klaidingi sudėtingumo signalai, kurie apsunkina architektūrinius sprendimus, nes neaišku, kas yra apkrova, o kas menka.
2023 m. „DevOps Research and Assesss“ (DORA) grupės atliktas tyrimas parodė, kad komandos, taikančios stiprią kodo kokybės praktiką, įskaitant reguliarų neveikiančio kodo pašalinimą, siuntas 2,4 karto dažniau ir turėjo 7 kartus mažesnį pakeitimų nesėkmės procentą nei komandos, kurios leidžia kauptis techninėms skoloms. Koreliacija nėra atsitiktinė. Švarios kodų bazės yra lengviau pagrįstas, lengviau išbandomos ir lengviau saugiai keičiamos.
Įmonėms, kurioms tokiomis platformomis kaip Mewayz, kuri valdo 138 000 naudotojų 207 atskiruose verslo moduliuose, pradedant CRM ir darbo užmokesčiu, baigiant transporto priemonių parko valdymu ir susietais bio įrankiais, kodų bazės būklė padidino interesus. Kai jūsų platforma apima tiek daug funkcinių sričių, modulių integravimo paviršius yra didžiulis. Nepanaudotas eksportavimas pagrindiniame modulyje gali sukurti klaidingus priklausomų modulių lūkesčius, suaktyvinti nereikalingus pakartotinius atvaizdavimus vartotojo sąsajos sluoksnyje ir apsunkinti priklausomybės grafiką taip, kad būsimi pakeitimai taptų rizikingi.
Priklausomybės analizės integravimas į šiuolaikines plėtros darbo eigas
Tikroji greitų įrankių, tokių kaip „Rev-dep“, galia nėra vienkartinis išvalymas – tai galimybė vykdyti nuolatinę analizę, kaip įprasto kūrimo ciklo dalį. Kai neveikiančio kodo nuskaitymas užtrunka 4 sekundes, o ne 4 minutes, galite įtraukti jį į savo išankstinio įsipareigojimo kabliukus. Kai užtrunka 4 sekundes, o ne 4 minutes, jūsų CI konvejeriui gali nepavykti įvykdyti ištraukimo užklausos, kuri įveda naujus nepanaudotus eksportus, o ne leidžia jiems tyliai kauptis.
💡 DID YOU KNOW?
Mewayz replaces 8+ business tools in one platform
CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.
Start Free →Šis perėjimas nuo „ketvirčio valymo įvykio“ prie „nepertraukiamo kokybės vartų“ yra panašus į tai, kas atsitiko, kai tarpai tapo pakankamai greiti, kad galėtų veikti kiekvieną kartą paspaudus IDE klavišą. Prieš „ESLint“ paleidžiant realiuoju laiku, kodo stilius buvo vykdomas periodiškai peržiūrint kodą. Po to jis tapo „ambient“ – dalis grįžtamojo ryšio ciklo kūrėjų patyrė rašydami kodą, o ne vėliau. Greita priklausomybės analizė gali sukurti tokį patį aplinkos kokybės spaudimą aplink neveikiantį kodą.
Šios darbo eigos nustatymas paprastai apima tris komponentus:
- Pagrindinė analizė: paleiskite įrankį pagal dabartinę kodų bazę, kad suprastumėte esamo neveikiančio kodo mastą. Nemėginkite visko ištaisyti iš karto – skirstykite pagal modulį ir nustatykite prioritetus pagal riziką.
- CI vykdymas: pridėkite analizę prie konvejerio nustačius slenkstį – nepavyks atlikti bet kokių naujai įvestų nepanaudotų eksportavimo failų, bet nesugeskite ir esamų, kol jų neišvalysite.
- Suplanuoti valymo žingsniai: naudokite įrankio išvestį, kad vadovautumėte įprastam valymo darbui, stebėdami negyvų kodų skaičių kaip komandos būsenos metriką laikui bėgant.
What the Go Tooling Renesanso signalai SaaS kūrėjams
Rev-dep yra platesnio kūrėjo įrankių modelio dalis: visose kategorijose atsiranda našių alternatyvų nusistovėjusiems „JavaScript“ įrankiams, sukurtiems „Go“ arba „Rust“. „Biome“ daugelyje komandų pakeitė ESLint ir Prettier. Turbopack ir Rspack valgo Webpack pietus. Bun meta iššūkį pačiam Node.js. Bendra tema yra ta, kad šie įrankiai ne tik siūlo laipsnišką patobulinimą – jie siūlo patobulinimus laipsniškai, kurie keičia praktiškumą.
SaaS įmonėms, statančioms sudėtingus kelių modulių produktus, šis įrankių renesansas turi tiesioginės įtakos inžinerijos greičiui. „Mewayz“ 207 modulių architektūra, apimanti viską nuo žmogiškųjų išteklių ir darbo užmokesčio iki rezervavimo sistemų ir analizės prietaisų skydelių, yra būtent tokia didelė, tarpusavyje sujungta kodų bazė, kurioje greita, tiksli priklausomybės analizė tampa itin svarbi. Kai bendrinamo paslaugų modulio pakeitimas teoriškai gali apimti daugybę funkcijų modulių, beveik akimirksniu matyti tikrąją priklausomybės grafiką yra ne tik patogu – tai tokia infrastruktūra, kuri apsaugo nuo brangių gamybos incidentų.
Galimybė atsakyti „kas iš tikrųjų naudoja šią funkciją“ per mažiau nei penkias sekundes, o ne per penkias minutes keičia inžinierių sprendimų priėmimą. Tai sumažina tyrimo išlaidas, o tai reiškia, kad inžinieriai tiria dažniau, o tai reiškia, kad jie priima geresnius sprendimus. Tai didėjanti investicijų į greitus įrankius grąža, kuri dažnai nepastebima, kai organizacijos galvoja apie kūrėjų produktyvumo išlaidas.
Negyvo kodo pašalinimo įtraukimas į inžinerinę kultūrą
Vien tik technologija nesukuria švarių kodų bazių – tai sukuria kultūra. Tokie įrankiai kaip „Rev-dep“ suteikia galimybę, tačiau norint paversti šią galimybę nuoseklia praktika, reikia organizacijos įsipareigojimo. Veiksmingiausios komandos su mirusio kodo metrikomis elgiasi taip pat, kaip elgiasi su bandymų aprėptimi: kaip matomą, stebimą kodų bazės būklės rodiklį, kuris peržiūrimas inžinierių susitikimuose ir įtraukiamas į sprinto planavimą.
Kai kurios konkrečios kultūrinės praktikos, kurios gerai veikia, apima „kodo ištrynimo dienų“ nustatymą – periodinius įvykius, kurių aiškus tikslas yra pašalinti kodą, o ne jį pridėti. „Netlify“ puikiai tai suvaidino paleisdama pirmaujančiųjų sąrašus, sekančius ištrintas tinklo linijas. Stripe viešai parašė apie savo praktiką kodo ištrynimą traktuoti kaip aukščiausios klasės inžinerinį indėlį, savo verte prilygstantį funkcijų darbui. Reikalingas mąstymo pasikeitimas yra pripažinimas, kad geriausias kodas yra kodas, kurio nėra: kiekviena eilutė, kurios neparašote, yra eilutė, kurios niekada nereikės prižiūrėti, išbandyti, derinti ar aiškinti naujam darbuotojui.
Produktų įmonėms, vykdančioms sudėtingas verslo operacijas, lygiagrečiai už inžinerijos ribų yra vienodai pamokomi. Ta pati disciplina, kuri daro kodų bazes sveikesnes – reguliarus auditas, aiški nuosavybė, pašalinimas daiktų, kurių niekas nenaudoja – taip pat daro sveikesnius verslo procesus. Tokios platformos kaip Mewayz sukurtos būtent tam, kad įmonėms būtų suteiktas toks veiklos aiškumas: vieningas vaizdas, kurie įrankiai naudojami, kurios darbo eigos kuria vertę ir kur kaupiasi organizacinis svoris. Nesvarbu, ar tikrinate nenaudojamos programinės įrangos eksportą, ar nenaudojamus verslo procesus, pagrindinė disciplina yra identiška.
Įrankiai tampa vis greitesni, grįžtamojo ryšio kilpos tampa vis griežtesnės, o komandos, kurios šiandien investuoja į kodų bazės higienos infrastruktūrą, kuria dar didesnį pranašumą, kuris duos naudos daugelį metų. „Rev-dep“ ir jos „Go“ valdomų kūrėjų įrankių grupė yra ne tik įdomūs etalonai – tai infrastruktūros sluoksnis, leidžiantis užtikrinti tvarų programinės įrangos greitį. Ir pasaulyje, kuriame iteracijos greitis yra pagrindinis programinės įrangos verslo konkurencinis pranašumas, tai nėra periferinis rūpestis. Tai visas žaidimas.
Dažniausiai užduodami klausimai
Kodėl Rev-dep greitesnis nei knip.dev?
Rev-dep yra sukurta Go, sudarytoje sistemos kalboje, optimizuotoje vienu metu ir neapdorotam vykdymo greičiui, o knip.dev veikia Node.js. Šis architektūrinis skirtumas leidžia Rev-dep analizuoti priklausomybės grafikus ir aptikti negyvą kodą iki 20 kartų greičiau. Didelėms monorepozicijoms arba sudėtingoms kodų bazėms, pvz., 207 modulių architektūrai, maitinančiai Mewayz verslo OS adresu app.mewayz.com, šis našumo trūkumas reiškia, kad kiekvieno CI vykdymo metu sutaupoma realiojo laiko.
Kiek neveikiančio kodo sukaupia tipiškas augantis projektas?
Inžinierių komandų tyrimai ir anekdotiniai pranešimai rodo, kad subrendusiose kodų bazėse gali būti nuo 10 % iki 35 % nenaudojamo arba nepasiekiamo kodo. Problema kyla, kai komandos plečiasi – funkcijos nebenaudojamos, keičiasi API, o moduliai paliekami jų neišvalius. Tokios platformos kaip „Mewayz“, kuri sujungia daugiau nei 207 verslo modulius į vieną 19 USD per mėnesį kainuojančią operacinę sistemą, labai priklauso nuo sistemingo mirusio kodo aptikimo, kad kodų bazė būtų plona ir prižiūrima.
Ar „Rev-dep“ tinka komandoms, kurios nenaudoja „JavaScript“ ar „TypeScript“?
Šiuo metu „Rev-dep“ daugiausia dėmesio skiria „JavaScript“ ir „TypeScript“ ekosistemoms, todėl šiose aplinkose tai yra tiesioginė knip.dev alternatyva. Palaikymas papildomoms kalboms gali plėstis, kai projektas bręsta. Jei jūsų komanda kuria žiniatinkliu pagrįstus produktus arba SaaS įrankius – panašiai kaip „Mewayz“ pristato visą verslo operacinę sistemą adresu app.mewayz.com – o jūsų krūvoje yra daug JS/TS, „Rev-dep“ šiandien verta įvertinti kaip kūrėjo įrankių grandinės dalį.
Ar galiu integruoti Rev-dep į esamą CI / CD konvejerį?
Taip. „Rev-dep“ sukurtas kaip CLI įrankis, leidžiantis lengvai patekti į bet kurį CI / CD vamzdyną kartu su esamais pūkavimo ir testavimo veiksmais. Jo greičio pranašumas ypač vertingas automatizuotuose vamzdynuose, kur greitesnės grįžtamojo ryšio linijos sumažina kūrėjo laukimo laiką. Nesvarbu, ar naudojate taupią paleisties įmonę, ar valdote visas funkcijas turinčią platformą, pvz., „Mewayz“ 19 USD/mėn verslui skirtą OS, negyvos kodo analizės integravimas į savo konvejerį padeda užtikrinti kodų bazės higieną kiekvieno sujungimo metu.
We use cookies to improve your experience and analyze site traffic. Cookie Policy