Hacker News

Onyesha HN: Rev-dep - muundo mbadala wa knip.dev 20x haraka zaidi katika Go

Maoni

14 min read Via github.com

Mewayz Team

Editorial Team

Hacker News

Kodi Iliyofichwa kwa Kila Timu ya Programu inayokua

Kila mradi wa programu unaodumu kwa muda wa kutosha hatimaye hukabiliana na janga lile lile tulivu: msingi wa kanuni huanza kukua kwa kasi zaidi kuliko vile timu inavyoweza kuuelewa. Hufanya kazi hakuna mtu anayepiga simu, uhamishaji ambao uliundwa kwa kipengele kilichosafirishwa mnamo 2022 na kuacha kutumika kimya kimya, vipengee vinavyoishi kwenye diski lakini havifikii kivinjari kamwe. Huu sio uzembe - ni fizikia. Timu husonga haraka, mahitaji yanabadilika, na entropy haitoshi. Swali sio ikiwa codebase yako ina nambari iliyokufa. Swali ni kiasi gani inakugharimu kwa sasa.

Kulingana na utafiti kutoka kwa timu ya tija ya uhandisi ya Google, wasanidi programu hutumia wastani wa 42% ya muda wao wa kusimba kusoma na kuelewa misimbo iliyopo badala ya kuandika utendakazi mpya. Wakati msimbo huo uliopo unajumuisha maelfu ya mistari ambayo haitumiki tena kwa madhumuni yoyote, asilimia hiyo hubadilika kuwa juu zaidi. Kwa timu ya wahandisi kumi, hiyo ni wafanyakazi wanne wa kudumu ambao hawafanyi chochote chenye tija - si kwa sababu ni wavivu, lakini kwa sababu zana zao haziendani na kasi ya umri wa programu.

Hii ndiyo sababu wimbi jipya la zana za wasanidi programu zilizojengwa kwenye lugha za mifumo kama vile Go na Rust linaleta msisimko wa kweli katika miduara ya uhandisi. Zana kama vile Rev-dep — kichanganuzi cha utegemezi cha kinyume ambacho kinadai kukimbia mara 20 kwa kasi zaidi kuliko knip.dev maarufu ya JavaScript — inawakilisha zaidi ya uboreshaji unaoongezeka. Yanaashiria kufikiria upya kwa kimsingi jinsi tunavyotumia mchakato wa maendeleo wenyewe.

Ni Nini Kinachofanya Uchambuzi wa Kurejesha Utegemezi

Kabla ya kuelewa ni kwa nini kasi ni muhimu sana, inasaidia kuelewa ni zana gani za uchambuzi wa utegemezi zinafanya. Katika mradi wa JavaScript au TypeScript, kila faili huingizwa kutoka kwa faili zingine. Kila kipengele cha kukokotoa, darasa, au mara kwa mara ambacho husafirishwa kutoka kwa moduli huunda utegemezi unaowezekana - jambo ambalo sehemu zingine za msingi wa kanuni zinaweza kutegemea. "Reverse" uchanganuzi wa utegemezi unageuza mtazamo huu: badala ya kuuliza "moduli hii inategemea nini," inauliza "ni nini kinategemea moduli hii?"

Ikiwa jibu la swali hilo la pili ni "hakuna kitu," umepata msimbo uliokufa. Usafirishaji wa nje ambao hakuna kitu kinachoagizwa ni ubadhirifu. Chaguo la kukokotoa ambalo haliitaji chochote ni deni la kiufundi lenye kiwango cha riba cha kila mwezi. Badilisha zana za utegemezi kwa utaratibu tembea grafu yako yote ya mradi, panga kila uhusiano kati ya moduli, na uelekeze nodi ambazo hazina miunganisho ya ndani. Matokeo yake ni ukaguzi kamili wa kila kitu katika msingi wako wa msimbo ambacho kinaweza kuondolewa kwa usalama.

Knip.dev hufanya hivi vyema kwa miradi ya JavaScript na TypeScript, na inaheshimiwa sana katika jumuiya. Lakini imeandikwa katika JavaScript, ambayo ina maana kwamba inaendeshwa kwenye Node.js, ambayo ina maana kwamba inarithi vikwazo vyote vya utendaji wa nyuzi moja ya Node wakati wa kufanya ufuatiliaji wa mfumo wa faili kwa kiasi kikubwa na uchanganuzi wa ishara. Kwa mradi ulio na faili 500, hii ni sawa. Kwa mradi ulio na faili 50,000 - aina ya monorepo inayowezesha bidhaa za SaaS za biashara - uchambuzi unaweza kuchukua dakika. Na dakika, kwenye mwako mabomba ya kisasa ya CI/CD hufanya kazi, ni kivunjaji.

Kwa nini Go hubadilisha Hesabu

Go iliundwa kuanzia mwanzo hadi juu kwa aina haswa ya mzigo wa kazi ambao uchanganuzi wa utegemezi unadai: faili ya haraka ya I/O, kanuni bora zaidi za upatanishi na muda mfupi zaidi wa uendeshaji. Ambapo Node.js huchakata kazi moja kwa wakati mmoja kwenye uzi mmoja na hutegemea simu na kuahidi usambamba bandia, Go inaweza kuibua maelfu ya watendaji ambao hutekeleza kikweli sambamba katika viini vyote vya CPU vinavyopatikana. Kwa kazi inayojumuisha kusoma mamia ya faili, kuchanganua AST zao, na kujenga grafu ya uhusiano wa ishara, tofauti hii ya usanifu hutafsiri moja kwa moja katika utendakazi wa saa-ukuta.

Ongezeko la kasi la 20x linalodaiwa na Rev-dep si uchawi — ni kile kinachotokea unapolinganisha lugha sahihi na tatizo linalofaa. Asili iliyokusanywa ya Go pia inamaanisha hakuna adhabu ya joto ya JIT. Kuanzia mwanzo baridi hadi uchanganuzi kamili, mfumo wa jozi ya Go unafanya kazi katika utendakazi unaokaribia kilele. Maana ya vitendo ni kwamba uchanganuzi ambao ulichukua sekunde 90 katika zana inayotegemea Nodi unaweza kukamilika kwa chini ya sekunde 5 kwa usawa wa Go uliotekelezwa vizuri. Hiyo ndiyo tofauti kati ya hundi ambayo wasanidi programu huiruka kwa sababu "inachukua milele" na ile inayofanya kazi kwa kila ahadi bila mtu yeyote kutambua juu ya jambo hilo.

"Zana bora zaidi ya msanidi programu ni ile inayotoka njiani. Iwapo kitengo chako cha uchanganuzi kitaongeza dakika tatu kwa kila bomba la CI, wasanidi programu watapata njia za kuruka. Kasi si jambo zuri kuwa nalo - ni sharti la kupitishwa."

Kesi ya Biashara ya Usafi wa Codebase

Nambari iliyokufa si tatizo la urembo wa wasanidi programu tu - ina matokeo madhubuti ya biashara ambayo huchanganyika kwa wakati. Zingatia ni gharama gani za msingi za kanuni zilizovimba kwa mashirika:

  • Muda mrefu zaidi wa ujenzi unaopunguza kasi ya upelekaji na kupunguza idadi ya matoleo ambayo timu inaweza kusafirisha kwa usalama kwa wiki
  • Mzigo wa juu wa utambuzi kwa wahandisi wanaoingia kwenye ndege, ambao lazima watumie wiki kadhaa kutofautisha mifumo amilifu na ile iliyoachwa
  • Ukubwa wa vifurushi ulioongezeka ambao unaathiri utendaji wa programu, hasa katika programu za wavuti ambapo kila kilobaiti huathiri saa za upakiaji na viwango vya ubadilishaji
  • Upanuzi wa uso wa usalama — nambari ya kuthibitisha ambayo bado ina vitegemezi bado ni vekta ya udhaifu katika vifurushi hivyo
  • Mtiririko wa majaribio ambapo majaribio ya utendakazi ulioondolewa yanaendelea kufanya kazi, hutumia dakika za CI, na mara kwa mara kushindwa kwa njia za kutatanisha
  • Ishara za utata za uwongo ambazo hufanya maamuzi ya usanifu kuwa magumu zaidi kwa sababu haijulikani ni nini kinachobeba mzigo na kilichobaki

Utafiti wa 2023 wa kikundi cha Utafiti na Tathmini ya DevOps (DORA) uligundua kuwa timu zilizo na kanuni thabiti za ubora wa msimbo - ikiwa ni pamoja na kuondolewa mara kwa mara kwa misimbo iliyokufa - zilisafirishwa mara 2.4 mara nyingi zaidi na zilikuwa na viwango vya chini vya mabadiliko ya mara 7 kuliko timu zinazoruhusu deni la kiufundi kulimbikiza. Uunganisho sio wa kubahatisha. Misimbo safi ya msimbo ni rahisi kufikiria, ni rahisi kuijaribu, na ni rahisi kuibadilisha kwa usalama.

Kwa biashara zinazojengwa kwenye majukwaa kama Mewayz — ambayo huwawezesha watumiaji 138,000 katika sehemu 207 tofauti za biashara kuanzia CRM na malipo hadi usimamizi wa meli na zana za viungo-katika-bio — codebase health ina hisa nyingi. Wakati jukwaa lako linaenea vikoa vingi vya utendaji, uso wa ujumuishaji kati ya moduli ni mkubwa. Uhamishaji usiotumika katika sehemu kuu unaweza kuunda matarajio ya uwongo kwa moduli tegemezi, kusababisha uonyeshaji upya usiohitajika katika safu ya UI, na kutatiza grafu ya utegemezi kwa njia zinazofanya mabadiliko ya baadaye kuwa hatari.

Kuunganisha Uchambuzi wa Utegemezi katika Mitiririko ya Kazi ya Kisasa ya Maendeleo

Nguvu halisi ya zana za haraka kama vile Rev-dep si usafishaji wa mara moja unaowasha - ni uwezo wa kufanya uchanganuzi endelevu kama sehemu ya mzunguko wako wa kawaida wa maendeleo. Wakati uchanganuzi wa msimbo uliokufa unachukua sekunde 4 badala ya dakika 4, unaweza kuiongeza kwenye ndoano zako za kufanya mapema. Inapochukua sekunde 4 badala ya dakika 4, bomba lako la CI linaweza kushindwa ombi la kuvuta ambalo litaleta uhamishaji mpya ambao haujatumika badala ya kuwaruhusu kujilimbikiza kimya kimya.

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

Mabadiliko haya kutoka "tukio la kusafisha kila robo" hadi "lango la ubora unaoendelea" ni sawa na kile kilichotokea wakati linters zilipokuwa na kasi ya kutosha kufanya kazi kwa kila mibogo ya vitufe kwenye IDE. Kabla ya ESLint kufanya kazi katika muda halisi, mtindo wa msimbo ulitekelezwa na ukaguzi wa mara kwa mara wa misimbo. Baadaye, ilianza kuwa tulivu - sehemu ya wasanidi wa kitanzi cha maoni walikumbana nayo wakati wa kuandika msimbo, sio baadaye. Uchanganuzi wa haraka wa utegemezi unaweza kuunda shinikizo sawa la ubora karibu na nambari iliyokufa.

Kuweka utendakazi huu kwa kawaida huhusisha vipengele vitatu:

  1. Uchambuzi wa msingi: Tekeleza zana dhidi ya msimbo wako wa sasa ili kuelewa ukubwa wa msimbo uliokufa. Usijaribu kurekebisha kila kitu mara moja - jaribu kwa moduli na upe kipaumbele kwa hatari.
  2. Utekelezaji wa CI: Ongeza uchanganuzi kwenye bomba lako kwa kiwango cha juu - shindwa kwa uhamishaji wowote mpya ulioletwa ambao haujatumika, lakini usishindwe na zilizopo hadi uzisafisha.
  3. Mbio za kusafisha zilizoratibiwa: Tumia zana ya kutoa ili kuongoza kazi ya mara kwa mara ya kusafisha, kufuatilia idadi ya misimbo iliyokufa kama kipimo cha afya cha timu baada ya muda.

Nini Ishara za Ufufuo wa Vifaa vya Go kwa Wajenzi wa SaaS

Rev-dep ni sehemu ya muundo mpana zaidi katika utumiaji wa zana za wasanidi programu: mbadala za utendaji wa juu kwa zana zilizoanzishwa za JavaScript, zilizoundwa katika Go au Rust, zinaonekana katika kila aina. Biome ilibadilisha ESLint na Prettier kwa timu nyingi. Turbopack na Rspack wanakula chakula cha mchana cha Webpack. Bun inachangamoto Node.js yenyewe. Jambo la kawaida ni kwamba zana hizi hazitoi uboreshaji wa ziada tu - zinatoa uboreshaji wa hatua ambayo hubadilisha kile kinachofaa.

Kwa kampuni za SaaS zinazounda bidhaa changamano, za moduli nyingi, ufufuaji huu wa zana una athari za moja kwa moja kwa kasi ya uhandisi. Usanifu wa Mewayz wa moduli 207 - unaojumuisha kila kitu kutoka kwa HR na malipo hadi mifumo ya kuweka nafasi na dashibodi za uchanganuzi - inawakilisha haswa aina kubwa ya msingi iliyounganishwa ambapo uchambuzi wa haraka na sahihi wa utegemezi unakuwa muhimu sana kiutendaji. Wakati mabadiliko ya moduli ya matumizi yaliyoshirikiwa yanaweza kubadilika kinadharia kupitia sehemu nyingi za vipengele, kuwa na mwonekano wa karibu wa papo hapo kwenye grafu halisi ya utegemezi si rahisi tu - ni aina ya miundombinu inayozuia matukio ya gharama kubwa ya uzalishaji.

Uwezo wa kujibu "ni nini hasa hutumia chaguo hili la kukokotoa" chini ya sekunde tano badala ya dakika tano hubadilisha jinsi wahandisi hufanya maamuzi. Inapunguza gharama ya uchunguzi, ambayo ina maana wahandisi kuchunguza mara nyingi zaidi, ambayo ina maana wao kufanya maamuzi bora. Hii ni faida iliyojumuishwa kwenye uwekezaji katika zana za haraka ambayo mara nyingi husahaulika wakati mashirika yanafikiria kuhusu matumizi ya tija ya wasanidi.

Kufanya Kuondoa Nambari Iliyokufa Kuwa Sehemu ya Tamaduni Yako ya Uhandisi

Teknolojia pekee haijengi misingi safi ya kanuni - utamaduni hufanya hivyo. Zana kama vile Rev-dep hutoa uwezo, lakini kugeuza uwezo huo kuwa mazoezi thabiti kunahitaji kujitolea kwa shirika. Timu zinazofaa zaidi hushughulikia vipimo vya msimbo uliokufa kwa njia sawa na zinavyoshughulikia huduma ya majaribio: kama kiashirio kinachoonekana, kinachofuatiliwa cha afya ya codebase ambacho hukaguliwa katika mikutano ya uhandisi na kujumuishwa katika upangaji wa mbio fupi.

Baadhi ya desturi mahususi za kitamaduni zinazofanya kazi vizuri ni pamoja na kuteua "siku za kufuta msimbo" - matukio ya mara kwa mara ambapo lengo la wazi ni kuondoa msimbo badala ya kuiongeza. Netlify iliboresha hili kwa kutumia bao za wanaoongoza kufuatilia laini zilizofutwa. Stripe ameandika hadharani kuhusu mazoezi yao ya kushughulikia ufutaji wa msimbo kama mchango wa uhandisi wa daraja la kwanza, sawa na thamani ya kuangazia kazi. Mabadiliko ya mawazo yanayohitajika ni kutambua kwamba msimbo bora zaidi ni msimbo ambao haupo: kila mstari usioandika ni mstari ambao hauhitaji kamwe kudumisha, kupima, kutatua, au kuelezea kwa mfanyakazi mpya.

Kwa kampuni za bidhaa zinazosimamia shughuli changamano za biashara, ulinganifu wa nje ya uhandisi unafunza vile vile. Nidhamu ile ile inayofanya misingi ya kanuni kuwa bora zaidi - ukaguzi wa mara kwa mara, umiliki wazi, kuondoa vitu ambavyo hakuna mtu anayetumia - hufanya michakato ya biashara kuwa nzuri pia. Mifumo kama Mewayz imeundwa kwa usahihi ili kuzipa biashara aina hiyo ya uwazi wa kiutendaji: mwonekano mmoja wa zana ambazo zinatumika, mtiririko gani wa kazi unazalisha thamani, na ambapo uzito wa shirika unaongezeka. Iwe unakagua uhamishaji wa programu ambazo hazijatumika au michakato ya biashara ambayo haijatumika, nidhamu ya msingi ni sawa.

Zana zinakua kwa kasi, misururu ya maoni inazidi kuwa ngumu, na timu zinazowekeza katika miundombinu ya usafi wa codebase leo zinaunda faida kubwa ambayo italipa faida kwa miaka mingi. Rev-dep na kundi lake la zana za wasanidi wa Go-powered sio tu alama za kuvutia - ni safu ya miundombinu inayowezesha kasi endelevu ya programu. Na katika ulimwengu ambapo kasi ya kurudia ndio faida kuu ya ushindani kwa biashara za programu, hilo sio jambo la kawaida. Ni mchezo mzima.

Maswali Yanayoulizwa Sana

Ni nini kinachofanya Rev-dep iwe haraka kuliko knip.dev?

Rev-dep imeundwa katika Go, lugha ya mifumo iliyokusanywa iliyoboreshwa kwa upatanifu na kasi ghafi ya utekelezaji, ilhali knip.dev inaendeshwa kwenye Node.js. Tofauti hii ya usanifu inaruhusu Rev-dep kuchanganua grafu za utegemezi na kugundua msimbo uliokufa hadi 20x haraka. Kwa monorepos kubwa au misingi changamano ya msimbo - kama vile usanifu wa moduli 207 unaowezesha Mfumo wa Uendeshaji wa biashara wa Mewayz kwenye app.mewayz.com - pengo hilo la utendakazi hutafsiriwa kuwa muda halisi unaohifadhiwa kwa kila uendeshaji wa CI.

Je, mradi wa kawaida unaokua hukusanya msimbo kiasi gani?

Tafiti na ripoti za hadithi kutoka kwa timu za wahandisi zinapendekeza kuwa misingi ya misimbo iliyokomaa inaweza kubeba popote kutoka 10% hadi 35% ya msimbo ambayo haijatumika au haiwezi kufikiwa. Shida huchanganyika kadiri timu inavyokua - vipengele huacha kutumika, API hubadilika, na moduli huachwa bila kusafishwa. Mifumo kama vile Mewayz, ambayo huunganisha zaidi ya moduli 207 za biashara katika mfumo mmoja wa uendeshaji wa $19/mozi, hutegemea sana utambuzi wa misimbo iliyokufa ili kuweka msingi wa msimbo kuwa mnene na udumishwe.

Je, Rev-dep inafaa kwa timu ambazo hazitumii JavaScript au TypeScript?

Rev-dep kwa sasa inaangazia JavaScript na mifumo ikolojia ya TypeScript, na kuifanya kuwa mbadala wa moja kwa moja wa knip.dev kwa mazingira hayo. Usaidizi wa lugha za ziada unaweza kupanuka kadri mradi unavyoendelea kukomaa. Iwapo timu yako itaunda bidhaa zinazotegemea wavuti au zana za SaaS - sawa na jinsi Mewayz inavyowasilisha Mfumo wake kamili wa uendeshaji wa biashara kwenye app.mewayz.com - na mrundikano wako ni wa JS/TS-heavy, Rev-dep inafaa kutathminiwa kama sehemu ya msururu wa zana za msanidi wako leo.

Je, ninaweza kuunganisha Rev-dep kwenye bomba langu lililopo la CI/CD?

Ndiyo. Rev-dep imeundwa kama zana ya CLI, na kuifanya iwe rahisi kushuka kwenye bomba lolote la CI/CD pamoja na hatua zako zilizopo za kuweka na kujaribu. Faida yake ya kasi ni muhimu sana katika mabomba ya kiotomatiki ambapo misururu ya maoni ya haraka hupunguza muda wa kusubiri wa wasanidi programu. Iwe unaanzisha mpango mdogo au unasimamia mfumo kamili kama vile Mfumo wa Uendeshaji wa Mewayz wa $19/mo, kujumuisha uchanganuzi wa misimbo iliyokufa kwenye bomba lako husaidia kutekeleza usafi wa kanuni katika kila uunganishaji.

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