Hacker News

Zobraziť HN: Rev-dep – 20x rýchlejšia alternatívna zostava knip.dev v Go

Komentáre

17 min read Via github.com

Mewayz Team

Editorial Team

Hacker News

Skrytá daň každého rastúceho softvérového tímu

Každý softvérový projekt, ktorý prežije dostatočne dlho, nakoniec čelí rovnakej pokojnej kríze: kódová základňa začína rásť rýchlejšie, než jej tím dokáže porozumieť. Funkcie, ktoré nikto nevolá, exporty, ktoré boli vytvorené pre funkciu, ktorá bola dodaná v roku 2022 a bola potichu vyradená, komponenty, ktoré žijú na disku, ale nikdy sa nedostanú do prehliadača. To nie je lajdáctvo – to je fyzika. Tímy sa pohybujú rýchlo, požiadavky sa menia a entropia je neúprosná. Otázkou nie je, či má vaša kódová základňa mŕtvy kód. Otázkou je, koľko vás to momentálne stojí.

Podľa prieskumu tímu inžinierskej produktivity spoločnosti Google trávia vývojári v priemere 42 % času kódovania čítaním a porozumením existujúceho kódu namiesto písania nových funkcií. Keď existujúci kód obsahuje tisíce riadkov, ktoré už neslúžia žiadnemu účelu, toto percento je ešte vyššie. Pre tím desiatich inžinierov sú to v skutočnosti štyria zamestnanci na plný úväzok, ktorí nerobia nič produktívneho – nie preto, že by boli leniví, ale preto, že ich nástroje nedržia krok s rýchlosťou starnutia softvéru.

To je dôvod, prečo nová vlna nástrojov pre vývojárov postavená na systémových jazykoch ako Go a Rust vyvoláva v inžinierskych kruhoch skutočné vzrušenie. Nástroje ako Rev-dep – reverzný analyzátor závislostí, ktorý tvrdí, že bežia 20x rýchlejšie ako populárny knip.dev založený na JavaScripte – predstavujú viac než len postupné zlepšenie. Signalizujú zásadné prehodnotenie toho, ako nástrojom samotný vývojový proces.

Čo vlastne analýza reverznej závislosti robí

Skôr ako pochopíte, prečo na rýchlosti tak záleží, pomôže vám pochopiť, čo nástroje analýzy závislostí vlastne robia. V projekte JavaScript alebo TypeScript sa každý súbor importuje z iných súborov. Každá funkcia, trieda alebo konštanta, ktorá sa exportuje z modulu, vytvára potenciálnu závislosť – niečo, na čo sa môžu spoliehať iné časti kódovej základne. „Reverzná“ analýza závislostí prevracia túto perspektívu: namiesto otázky „od čoho závisí tento modul“, sa pýta „čo závisí od tohto modulu?“

Ak je odpoveď na druhú otázku „nič“, našli ste mŕtvy kód. Vývoz, ktorý nič nedováža, je odpad. Funkciou, ktorú nič nevolá, je technický dlh s mesačnou úrokovou sadzbou. Nástroje reverznej závislosti systematicky prechádzajú celým grafom vášho projektu, mapujú každý vzťah medzi modulmi a zobrazujú uzly, ktoré nemajú žiadne prichádzajúce spojenia. Výsledkom je presný audit všetkého vo vašej kódovej základni, čo by sa dalo bezpečne odstrániť.

Knip.dev to robí dobre pre projekty JavaScript a TypeScript a v komunite je to široko rešpektované. Ale je napísaný v JavaScripte, čo znamená, že beží na Node.js, čo znamená, že dedí všetky obmedzenia výkonu Node s jedným vláknom pri vykonávaní rozsiahleho prechodu súborového systému a analýzy symbolov. Pre projekt s 500 súbormi je to v poriadku. V prípade projektu s 50 000 súbormi – typu monorepo, ktorý poháňa skutočné podnikové produkty SaaS – môže analýza trvať niekoľko minút. A minúty pri kadencii, s akou fungujú moderné potrubia CI/CD, sú priekopníkom.

Prečo Go mení výpočet

Go bol od základov navrhnutý pre presne taký druh pracovného zaťaženia, ktorý vyžaduje analýza závislostí: rýchly vstup/výstup súborov, vynikajúce primitívy súbežnosti a minimálna réžia za behu. Tam, kde Node.js spracováva jednu úlohu v jednom vlákne a spolieha sa na spätné volania a sľubuje falošný paralelizmus, Go môže vytvoriť tisíce goroutín, ktoré sa skutočne vykonávajú paralelne na všetkých dostupných jadrách CPU. Pri úlohe, ktorá zahŕňa čítanie stoviek súborov, analýzu ich AST a vytvorenie grafu vzťahov medzi symbolmi, sa tento architektonický rozdiel premieta priamo do výkonu nástenných hodín.

20-násobné zrýchlenie, ktoré tvrdí Rev-dep, nie je kúzlo – stane sa to, keď priradíte správny jazyk k správnemu problému. Kompilovaná povaha Go tiež neznamená žiadnu penalizáciu za zahrievanie JIT. Od studeného štartu až po kompletnú analýzu pracuje binárny súbor Go na takmer špičkovom výkone. Praktickým dôsledkom je, že analýza, ktorá trvala 90 sekúnd v nástroji založenom na Node, môže byť dokončená za menej ako 5 sekúnd v dobre implementovanom ekvivalente Go. To je rozdiel medzi kontrolou, ktorú vývojári preskočia, pretože „trvá večnosť“, a kontrolou, ktorá prebieha pri každom odovzdaní bez toho, aby si niekto všimol réžiu.

"Najlepší vývojársky nástroj je taký, ktorý prekáža. Ak váš analytický balík pridá tri minúty ku každému kanálu CI, vývojári nájdu spôsoby, ako ho preskočiť. Rýchlosť nie je nič príjemné – je to predpoklad na prijatie."

Obchodný prípad pre Codebase Hygiene

Mŕtvy kód nie je len estetickým problémom vývojárov – má konkrétne obchodné dôsledky, ktoré sa časom znásobujú. Zvážte, koľko nafúknutých kódových základov v skutočnosti stojí organizácie:

  • Dlhšie časy zostavovania, ktoré spomaľujú procesy nasadenia a znižujú počet vydaní, ktoré môže tím bezpečne odoslať za týždeň
  • Vyššia kognitívna záťaž pre inžinierov nastupovania, ktorí musia stráviť týždne rozlišovaním aktívnych vzorov od opustených.
  • Väčšie veľkosti balíkov, ktoré znižujú výkon aplikácií, najmä vo webových aplikáciách, kde každý kilobajt ovplyvňuje časy načítania a miery konverzie
  • Rozšírenie povrchu zabezpečenia – mŕtvy kód, ktorý stále obsahuje závislosti, je stále vektorom zraniteľností v týchto balíkoch
  • Nafúknutie testovacieho balíka, kde stále prebiehajú testy odstránenej funkčnosti, spotrebúvajú minúty CI a občas zlyhajú mätúcimi spôsobmi
  • Nepravdivé signály zložitosti, ktoré sťažujú architektonické rozhodnutia, pretože nie je jasné, čo je nosné a čo nepodstatné

Štúdia skupiny DevOps Research and Assessment (DORA) z roku 2023 zistila, že tímy s prísnymi postupmi kvality kódu – vrátane pravidelného odstraňovania mŕtveho kódu – odosielali 2,4-krát častejšie a mali 7-krát nižšiu mieru zlyhania zmien ako tímy, ktoré nechali nahromadiť technický dlh. Korelácia nie je náhodná. Čisté kódové základne sú jednoduchšie na uvažovanie, ľahšie sa testujú a ľahšie sa dajú bezpečne meniť.

Pre firmy, ktoré stavajú na platformách ako Mewayz – ktorá poháňa 138 000 používateľov v 207 rôznych podnikových moduloch od CRM a miezd až po správu vozového parku a nástroje link-in-bio – zdravie kódovej základne znásobilo podiel. Keď vaša platforma zahŕňa toľko funkčných domén, integračná plocha medzi modulmi je obrovská. Nepoužité exporty v základnom module môžu vytvárať falošné očakávania pre závislé moduly, spúšťať zbytočné opätovné vykresľovanie vo vrstve používateľského rozhrania a skomplikovať graf závislosti spôsobmi, vďaka ktorým sú budúce zmeny riskantné.

Integrácia analýzy závislostí do moderných pracovných postupov rozvoja

Skutočná sila rýchlych nástrojov, ako je Rev-dep, nie je jednorazové vyčistenie, ktoré umožňuje – je to schopnosť spúšťať nepretržitú analýzu ako súčasť vášho bežného vývojového cyklu. Keď skenovanie mŕtveho kódu trvá 4 sekundy namiesto 4 minút, môžete ho pridať medzi svoje háky pred záväzkom. Keď to trvá 4 sekundy namiesto 4 minút, váš kanál CI môže zlyhať pri požiadavke na stiahnutie, ktorá zavedie nové nepoužívané exporty, namiesto toho, aby sa nechali ticho hromadiť.

💡 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 →

Tento posun od „udalosti štvrťročného čistenia“ k „bráne nepretržitej kvality“ je analogický tomu, čo sa stalo, keď sa linters stali dostatočne rýchlymi na to, aby bežali pri každom stlačení klávesu v IDE. Predtým, ako ESLint bežal v reálnom čase, bol štýl kódu vynútený pravidelnými kontrolami kódu. Potom sa to stalo ambientným – súčasťou spätnej väzby, ktorú vývojári zažili pri písaní kódu, nie potom. Rýchla analýza závislosti môže vytvoriť rovnaký tlak na kvalitu okolia okolo mŕtveho kódu.

Nastavenie tohto pracovného postupu zvyčajne zahŕňa tri komponenty:

  1. Analýza základnej línie: Spustite nástroj so svojou aktuálnou kódovou základňou, aby ste pochopili rozsah existujúceho mŕtveho kódu. Nesnažte sa opraviť všetko naraz – triedite podľa modulu a uprednostňujte podľa rizika.
  2. Presadzovanie CI: Pridajte analýzu do svojho kanála s prahom – zlyhajte pri všetkých novozavedených nepoužitých exportoch, ale nezlyhajte pri existujúcich, kým ich nevyčistíte.
  3. Plánované sprinty čistenia: Pomocou výstupu nástroja usmerňujte pravidelné čistenie a sledujte počet mŕtvych kódov ako metriku stavu tímu v priebehu času.

What the Go Tooling Renaissance Signals for SaaS Builders

Rev-dep je súčasťou širšieho modelu nástrojov pre vývojárov: v každej kategórii sa objavujú vysokovýkonné alternatívy k zavedeným nástrojom JavaScript zabudovaným v Go alebo Rust. Biome nahradil ESLint a Prettier v mnohých tímoch. Turbopack a Rspack jedia obed Webpacku. Bun je výzvou pre samotný Node.js. Spoločným bodom je, že tieto nástroje neponúkajú len postupné vylepšenie – ponúkajú vylepšenia krokových funkcií, ktoré menia to, čo je praktické.

Pre spoločnosti SaaS, ktoré vytvárajú komplexné, viacmodulové produkty, má táto renesancia nástrojov priamy vplyv na rýchlosť inžinierstva. 207-modulová architektúra Mewayz – zahŕňajúca všetko od HR a miezd až po rezervačné systémy a analytické dashboardy – predstavuje presne ten druh veľkej, vzájomne prepojenej kódovej základne, kde sa rýchla a presná analýza závislostí stáva prevádzkovo kritickou. Keď zmena na zdieľaný pomocný modul môže teoreticky preniknúť do desiatok modulov funkcií, takmer okamžitá viditeľnosť skutočného grafu závislosti nie je len pohodlná – je to druh infraštruktúry, ktorý zabraňuje drahým produkčným incidentom.

Možnosť odpovedať „na čo vlastne používa túto funkciu“ za menej ako päť sekúnd, a nie za päť minút, mení spôsob, akým sa inžinieri rozhodujú. Znižuje náklady na vyšetrovanie, čo znamená, že inžinieri vyšetrujú častejšie, čo znamená, že robia lepšie rozhodnutia. Ide o kombinovanú návratnosť investícií do rýchlych nástrojov, ktorá sa často prehliada, keď organizácie uvažujú o výdavkoch na produktivitu vývojárov.

Odstránenie mŕtveho kódu sa stane súčasťou vašej inžinierskej kultúry

Technológia sama o sebe nevytvára čisté kódové základne – kultúra áno. Nástroje ako Rev-dep poskytujú schopnosť, ale premena tejto schopnosti na konzistentnú prax si vyžaduje organizačné odhodlanie. Najúčinnejšie tímy zaobchádzajú s metrikami mŕtveho kódu rovnakým spôsobom, akým zaobchádzajú s testovacím pokrytím: ako s viditeľným, sledovaným indikátorom stavu kódovej základne, ktorý sa kontroluje na inžinierskych stretnutiach a zohľadňuje sa pri plánovaní sprintu.

Niektoré špecifické kultúrne praktiky, ktoré dobre fungujú, zahŕňajú označenie „dní vymazania kódu“ – pravidelných udalostí, ktorých jasným cieľom je namiesto pridania kódu odstrániť. Netlify to skvele gamifikovalo spustením výsledkových tabuliek, ktoré sledujú vymazané čisté riadky. Stripe verejne písal o ich postupe, pri ktorom pristupovali k vymazaniu kódu ako k prvotriednemu inžinierskemu príspevku, ktorý má rovnakú hodnotu ako celovečerná práca. Požadovaná zmena myslenia spočíva v uznaní, že najlepší kód je kód, ktorý neexistuje: každý riadok, ktorý nenapíšete, je riadok, ktorý nikdy nemusíte udržiavať, testovať, ladiť ani vysvetľovať novému zamestnancovi.

Pre produktové spoločnosti, ktoré riadia komplexné obchodné operácie, je paralela mimo inžinierstva rovnako poučná. Rovnaká disciplína, vďaka ktorej sú kódové základne zdravšie – pravidelné audity, jasné vlastníctvo, eliminácia vecí, ktoré nikto nepoužíva – robí aj obchodné procesy zdravšími. Platformy ako Mewayz sú vytvorené presne tak, aby firmám poskytli taký druh prevádzkovej prehľadnosti: jednotný pohľad na to, ktoré nástroje sa používajú, ktoré pracovné postupy vytvárajú hodnotu a kde sa hromadí mŕtva váha organizácie. Či už kontrolujete exporty nepoužívaného softvéru alebo nepoužívané obchodné procesy, základná disciplína je rovnaká.

Nástroje sú stále rýchlejšie, slučky spätnej väzby sú čoraz užšie a tímy, ktoré dnes investujú do infraštruktúry hygieny kódovej základne, budujú výhodu, ktorá sa bude vyplácať roky. Rev-dep a jeho kohorta vývojárskych nástrojov poháňaných Go nie sú len zaujímavé benchmarky – sú to infraštruktúrna vrstva, ktorá umožňuje udržateľnú rýchlosť softvéru. A vo svete, kde je rýchlosť iterácie primárnou konkurenčnou výhodou pre softvérové ​​firmy, to nie je okrajový problém. Je to celá hra.

Často kladené otázky

Čo robí Rev-dep rýchlejšie ako knip.dev?

Rev-dep je zabudovaný v Go, kompilovanom systémovom jazyku optimalizovanom pre súbežnú a nespracovanú rýchlosť vykonávania, zatiaľ čo knip.dev beží na Node.js. Tento architektonický rozdiel umožňuje Rev-dep analyzovať grafy závislostí a odhaliť mŕtvy kód až 20x rýchlejšie. Pri veľkých monorepo alebo zložitých kódových základniach – ako je 207-modulová architektúra, ktorá poháňa obchodný operačný systém Mewayz na app.mewayz.com – sa táto výkonnostná medzera premieta do reálneho času ušetreného pri každom spustení CI.

Koľko mŕtveho kódu nahromadí typický rastúci projekt?

Štúdie a neoficiálne správy od inžinierskych tímov naznačujú, že vyspelé kódové základne môžu obsahovať 10 % až 35 % nevyužitého alebo nedostupného kódu. Problém sa spája so škálovaním tímov – funkcie sú zastarané, rozhrania API sa menia a moduly sú opustené bez vyčistenia. Platformy ako Mewayz, ktoré konsolidujú viac ako 207 obchodných modulov do jedného operačného systému za 19 $/mesiac, sa vo veľkej miere spoliehajú na systematickú detekciu mŕtveho kódu, aby bola kódová základňa štíhla a udržiavateľná.

Je Rev-dep vhodný pre tímy, ktoré nepoužívajú JavaScript alebo TypeScript?

Rev-dep sa v súčasnosti zameriava na ekosystémy JavaScript a TypeScript, čo z neho robí priamu alternatívu k knip.dev pre tieto prostredia. Podpora pre ďalšie jazyky sa môže rozširovať, keď projekt dozrieva. Ak váš tím vytvára webové produkty alebo nástroje SaaS – podobne ako Mewayz dodáva svoj úplný obchodný operačný systém na app.mewayz.com – a váš balík je náročný na JS/TS, Rev-dep sa dnes oplatí vyhodnotiť ako súčasť vášho vývojového reťazca nástrojov.

Môžem integrovať Rev-dep do môjho existujúceho kanála CI/CD?

Áno. Rev-dep je navrhnutý ako nástroj CLI, vďaka čomu je jednoduché vstúpiť do akéhokoľvek potrubia CI/CD popri existujúcich krokoch liningu a testovania. Jeho rýchlostná výhoda je obzvlášť cenná v automatizovaných pipeline, kde rýchlejšie slučky spätnej väzby skracujú čakacie doby vývojárov. Či už prevádzkujete štíhly startup alebo spravujete plnohodnotnú platformu, ako je obchodný operačný systém Mewayz za 19 $/mesiac, integrácia analýzy mŕtveho kódu do vášho kanála pomáha presadzovať hygienu kódovej základne pri každom zlúčení.

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime