Hacker News

HNni ko'rsatish: Rev-dep – Go'da 20 baravar tezroq knip.dev muqobil qurilishi

Fikrlar

12 min read Via github.com

Mewayz Team

Editorial Team

Hacker News

Har bir o'sib borayotgan dasturiy ta'minot jamoasi uchun yashirin soliq

Etarlicha uzoq davom etadigan har bir dasturiy ta'minot loyihasi oxir-oqibat bir xil sokin inqirozga duch keladi: kodlar bazasi jamoa tushunadiganidan tezroq o'sishni boshlaydi. Hech kim chaqirmaydigan funksiyalar, 2022-yilda yetkazib berilgan va jimgina eskirgan funksiya uchun yaratilgan eksportlar, diskda yashovchi, lekin brauzerga hech qachon etib bormaydigan komponentlar. Bu beparvolik emas - bu fizika. Jamoalar tez harakat qiladi, talablar o'zgaradi va entropiya tinimsiz. Savol sizning kod bazangiz o'lik kodga egami yoki yo'qmi emas. Gap shundaki, bu sizga hozir qancha turadi.

Google muhandislik mahsuldorligi boʻyicha tadqiqot natijalariga koʻra, ishlab chiquvchilar yangi funksiyalarni yozish oʻrniga, mavjud kodni oʻqish va tushunish uchun kodlash vaqtining oʻrtacha 42%ni sarflaydi. Mavjud kod hech qanday maqsadga xizmat qilmaydigan minglab qatorlarni o'z ichiga olgan bo'lsa, bu foiz qiyshiqroq bo'ladi. O‘n nafar muhandisdan iborat jamoa uchun bu to‘rt nafar to‘la vaqtli xodim hech qanday samaradorlik bilan ishlamaydi — ular dangasaliklari uchun emas, balki ularning asboblari dasturiy ta’minot eskirish tezligiga mos kelmayotgani uchun.

Shuning uchun Go va Rust kabi tizim tillarida yaratilgan dasturchilar vositalarining yangi toʻlqini muhandislik doiralarida haqiqiy hayajonni keltirib chiqarmoqda. Rev-dep kabi vositalar - JavaScript-ga asoslangan mashhur knip.dev-ga qaraganda 20 baravar tezroq ishlashini da'vo qiluvchi teskari qaramlik analizatori - bu faqat bosqichma-bosqich yaxshilanishdan ko'proq narsani anglatadi. Ular rivojlanish jarayonining o‘zini qanday jihozlashimiz haqida tubdan qayta ko‘rib chiqishimizni bildiradi.

Teskari qaramlik tahlili aslida nima qiladi

Tezlik nima uchun bunchalik muhim ekanini tushunishdan oldin, bu qaramlikni tahlil qilish vositalari aslida nima qilayotganini tushunishga yordam beradi. JavaScript yoki TypeScript loyihasida har bir fayl boshqa fayllardan import qilinadi. Moduldan eksport qilinadigan har bir funktsiya, sinf yoki konstanta potentsial qaramlikni yaratadi - kod bazasining boshqa qismlari tayanishi mumkin bo'lgan narsa. "Teskari" qaramlik tahlili bu nuqtai nazarni o'zgartiradi: "Ushbu modul nimaga bog'liq" deb so'rash o'rniga "bu modulga nima bog'liq?"

Agar ikkinchi savolga javob "hech narsa" bo'lsa, siz o'lik kodni topdingiz. Hech narsa import qilinmagan eksport isrofdir. Hech narsa chaqirmaydigan funktsiya oylik foiz stavkasi bilan texnik qarzdir. Teskari bog'liqlik vositalari tizimli ravishda butun loyiha grafigida harakat qiladi, modullar o'rtasidagi har bir aloqani xaritada ko'rsatadi va kiruvchi ulanishlari bo'lmagan tugunlarni ko'rsatadi. Natija kod bazasidagi xavfsiz olib tashlanishi mumkin bo'lgan barcha narsalarning aniq tekshiruvidir.

Knip.dev buni JavaScript va TypeScript loyihalari uchun yaxshi bajaradi va u jamiyatda hurmatga sazovor. Lekin u JavaScript-da yozilgan, ya'ni u Node.js da ishlaydi, ya'ni u keng miqyosli fayl tizimini aylanib o'tish va belgilar tahlilini amalga oshirayotganda Node'ning barcha yagona tarmoqli ishlash cheklovlarini meros qilib oladi. 500 ta faylga ega loyiha uchun bu yaxshi. 50 000 ta faylga ega loyiha uchun - haqiqiy korporativ SaaS mahsulotlarini quvvatlaydigan monorepo turi - tahlil bir necha daqiqa vaqt olishi mumkin. Vaqti-vaqti bilan zamonaviy CI/CD quvurlari ishlayotgan daqiqalar esa kelishuvni buzadi.

Nega Go hisobni o'zgartiradi

Go boshidanoq bog'liqlik tahlili talab qiladigan ish yuki uchun yaratilgan: tezkor fayl kiritish-chiqarish, mukammal parallellik primitivlari va minimal ish vaqtiga qo'shimcha xarajatlar. Node.js bir vaqtning o‘zida bitta ish zarrachasida bitta vazifani bajaradi va qayta qo‘ng‘iroqlarga tayanadi va soxta parallelizmni va’da qilsa, Go barcha mavjud protsessor yadrolari bo‘ylab chinakam parallel ravishda ishlaydigan minglab gorutinlarni yaratishi mumkin. Yuzlab fayllarni oʻqish, ularning ASTʼlarini tahlil qilish va belgilar oʻrtasidagi munosabatlar grafigini yaratishni oʻz ichiga olgan vazifa uchun bu arxitektura farqi bevosita devor soati ishlashiga aylanadi.

Rev-dep tomonidan da'vo qilingan 20x tezlashtirish sehrli emas - bu siz to'g'ri tilni to'g'ri muammoga moslaganingizda sodir bo'ladi. Go-ning tuzilgan tabiati, shuningdek, JITni isitish uchun jazo yo'qligini anglatadi. Sovuq boshlanishidan to to'liq tahlilgacha Go ikkilik tizimi eng yuqori samaradorlikda ishlaydi. Amaliy xulosa shundan iboratki, tugunga asoslangan asbobda 90 soniya davom etgan tahlil yaxshi amalga oshirilgan Go ekvivalentida 5 soniyadan kamroq vaqt ichida yakunlanishi mumkin. Ishlab chiquvchilar o‘tkazib yuboradigan chek “abadiy davom etadi” va har bir topshiriqda hech kimga e’tibor bermasdan bajariladigan chek o‘rtasidagi farq shu.

"Dasturchilarning eng yaxshi vositasi bu yo'ldan chiqadigan vositadir. Agar tahlil to'plamingiz har bir CI quvur liniyasiga uch daqiqa qo'shsa, ishlab chiquvchilar uni o'tkazib yuborish yo'llarini topadilar. Tezlik yoqimli emas - bu qabul qilish uchun zaruriy shart."

Kod bazasi gigienasiga oid biznes misoli

O'lik kod shunchaki ishlab chiquvchining estetik muammosi emas, balki vaqt o'tishi bilan uning aniq biznes oqibatlari bor. Tashkilotlar uchun to'la-to'kis kod bazalari aslida qanday xarajatlarni ko'rib chiqing:

  • Uzoqroq qurish vaqtlari tarqatish quvurlarini sekinlashtiradi va jamoa haftada xavfsiz yetkazib berishni kamaytiradigan relizlar sonini kamaytiradi
  • Yuqori kognitiv yukbortda ishlaydigan muhandislar uchun, ular bir necha hafta davomida faol naqshlarni tashlab ketilganlardan farqlashlari kerak
  • To‘plam o‘lchamlari kattalashtirildi bu ilova unumdorligiga putur etkazadi, ayniqsa har bir kilobayt yuklanish vaqtlari va konversiya tezligiga ta’sir qiladigan veb-ilovalarda
  • Xavfsizlik sirtini kengaytirish — oʻlik kod hali ham bogʻliqliklarni oʻz ichiga oladi, bu paketlardagi zaifliklar uchun vektor boʻlib qolmoqda
  • Blaat test to'plami bu erda o'chirilgan funksiyalar bo'yicha testlar ishlashda davom etadi, CI daqiqalarini sarflaydi va vaqti-vaqti bilan chalkash usullarda muvaffaqiyatsizlikka uchraydi
  • Me'moriy qarorlarni qiyinlashtiradigan noto'g'ri murakkablik signallari nima yuk ko'taruvchi va nima eskirganligi noma'lum

DevOps Research and Assessment (DORA) guruhi tomonidan 2023-yilda oʻtkazilgan tadqiqot shuni koʻrsatdiki, kuchli kod sifati amaliyotiga ega boʻlgan jamoalar, jumladan, muntazam oʻlik kodni olib tashlash ham texnik qarzlar toʻplanishiga yoʻl qoʻyadigan jamoalarga qaraganda2,4 baravar tez-tez joʻnatiladi va 7 baravar kam oʻzgarishlarning muvaffaqiyatsizligi bor. Korrelyatsiya tasodifiy emas. Toza kodlar bazasi haqida fikr yuritish, sinab ko‘rish va xavfsiz o‘zgartirish osonroq.

Mewayz kabi platformalarda ishlayotgan bizneslar uchun — CRM va ish haqi toʻlashdan tortib flot boshqaruvi va bio-in-bio vositalarigacha boʻlgan 207 ta alohida biznes modullari boʻyicha 138 000 foydalanuvchiga quvvat beradi — kodlar bazasi salomatligi bir necha barobar koʻpaydi. Platformangiz juda ko'p funktsional domenlarni qamrab olsa, modullar orasidagi integratsiya yuzasi juda katta. Asosiy modulda foydalanilmagan eksportlar bog‘liq modullar uchun noto‘g‘ri taxminlar yaratishi, UI qatlamida keraksiz qayta renderlarni ishga tushirishi va qaramlik grafigini murakkablashtirishi mumkin, bu esa kelajakdagi o‘zgarishlarni xavfli qiladi.

Zamonaviy rivojlanish jarayonlariga qaramlik tahlilini integratsiyalash

Rev-dep kabi tezkor asboblarning haqiqiy kuchi bu bir martalik tozalash emas, balki normal rivojlanish siklining bir qismi sifatida uzluksiz tahlil qilish qobiliyatidir. O'lik kodni skanerlash 4 daqiqa o'rniga 4 soniya davom etsa, uni oldindan topshirilgan ilgaklaringizga qo'shishingiz mumkin. 4 daqiqa o‘rniga 4 soniya davom etsa, CI quvur liniyasi ularni jimgina to‘planishiga yo‘l qo‘ymasdan, yangi foydalanilmagan eksportlarni taqdim qiluvchi tortib olish so‘rovini bajara olmasligi mumkin.

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

Bu “choraklik tozalash tadbiri”dan “uzluksiz sifat darvozasi”ga oʻtish, linterlar IDE’dagi har bir tugma bosilganda ishlash uchun yetarlicha tez boʻlganda sodir boʻlgan voqeaga oʻxshaydi. ESLint real vaqtda ishlamasdan oldin, kod uslubi davriy kodlarni ko'rib chiqish orqali amalga oshirildi. Shundan so'ng, u atrof-muhitga aylandi — ishlab chiquvchilar keyin emas, balki kod yozish paytida boshdan kechirgan fikr-mulohazalarning bir qismi. Tez bog'liqlikni tahlil qilish o'lik kod atrofida bir xil muhit sifati bosimini yaratishi mumkin.

Ushbu ish jarayonini sozlash odatda uchta komponentni o'z ichiga oladi:

  1. Asosiy tahlil: Mavjud o'lik kodning ko'lamini tushunish uchun asbobni joriy kod bazasi bilan taqqoslang. Hamma narsani birdaniga tuzatishga urinmang – modul bo‘yicha tasniflang va xavf bo‘yicha ustuvorlikni belgilang.
  2. CIni qo'llash: Tahlilni quvur liniyasiga chegara bilan qo'shing — har qanday yangi kiritilgan foydalanilmagan eksportlarda muvaffaqiyatsizlikka uchraydi, lekin ularni tozalamaguningizcha mavjudlarida muvaffaqiyatsizlikka uchramang.
  3. Rejalashtirilgan tozalash sprintlari: Vaqt o‘tishi bilan jamoa salomatligi ko‘rsatkichi sifatida o‘lik kodlar sonini kuzatib, muntazam tozalash ishlariga rahbarlik qilish uchun asbobdan foydalaning.

SaaS quruvchilari uchun Go Tooling Renaissance signallari nima

Rev-dep - ishlab chiquvchilar uchun asboblarning kengroq namunasining bir qismi: Go yoki Rust-da o'rnatilgan JavaScript vositalarining yuqori samarali muqobillari har bir turkumda paydo bo'ladi. Biome ko'plab jamoalar uchun ESLint va Prettier o'rnini egalladi. Turbopack va Rspack Webpackning tushliklarini yeyishmoqda. Bun Node.js-ning o'ziga qiyinchilik tug'dirmoqda. Umumiy jihat shundaki, bu vositalar shunchaki bosqichma-bosqich takomillashtirishni taklif qilmaydi, balki ular amaliy bo‘lgan narsani o‘zgartiradigan bosqichma-bosqich takomillashtirishni taklif qiladi.

Murakkab, ko'p modulli mahsulotlarni ishlab chiqaradigan SaaS kompaniyalari uchun asbobning qayta tiklanishi muhandislik tezligiga bevosita ta'sir qiladi. Mewayzning 207 modulli arxitekturasi - HR va ish haqi to'lashdan tortib bron qilish tizimlari va tahliliy asboblar paneligacha bo'lgan hamma narsani qamrab oladi - tezkor va aniq qaramlik tahlili operatsion jihatdan muhim bo'lgan katta, o'zaro bog'langan kodlar bazasini ifodalaydi. Umumiy yordamchi modulga oʻzgartirish nazariy jihatdan oʻnlab funksiya modullari orqali oʻtishi mumkin boʻlsa, haqiqiy bogʻliqlik grafigini bir zumda koʻrish qulay emas, balki qimmat ishlab chiqarish hodisalarining oldini oladigan infratuzilma turidir.

“Ushbu funksiyadan aslida nima foydalanadi” degan savolga besh daqiqada emas, besh soniya ichida javob berish qobiliyati muhandislarning qaror qabul qilish usulini o‘zgartiradi. Bu tekshiruv narxini pasaytiradi, ya'ni muhandislar tez-tez tekshiradilar, ya'ni ular yaxshiroq qaror qabul qiladilar. Bu tez asbob-uskunalarga investitsiyalarning qo‘shimcha daromadi bo‘lib, tashkilotlar ishlab chiquvchilarning unumdorligi haqida o‘ylashganda ko‘pincha e’tibordan chetda qoladi.

O'lik kodni yo'q qilishni muhandislik madaniyatingizning bir qismiga aylantirish

Texnologiyaning o'zi toza kod bazalarini yaratmaydi - madaniyat. Rev-dep kabi vositalar qobiliyatni ta'minlaydi, ammo bu qobiliyatni izchil amaliyotga aylantirish uchun tashkiliy majburiyat talab etiladi. Eng samarali jamoalar oʻlik kod koʻrsatkichlariga xuddi test qamroviga qanday munosabatda boʻlsalar, shunday munosabatda boʻlishadi: kod bazasi sogʻligʻining koʻrinadigan, kuzatilgan koʻrsatkichi sifatida, muhandislik yigʻilishlarida koʻrib chiqiladi va sprintni rejalashtirishda hisobga olinadi.

Yaxshi ishlaydigan ba'zi maxsus madaniy amaliyotlar "kodni o'chirish kunlarini" belgilashni o'z ichiga oladi - davriy tadbirlar, bunda aniq maqsad kodni qo'shish o'rniga uni olib tashlashdir. Netlify buni o'chirib tashlangan tarmoq qatorlarini kuzatuvchi peshqadamlar jadvalini ishga tushirish orqali mashhur qildi. Stripe o'zlarining kodlarni o'chirishni birinchi darajali muhandislik hissasi sifatida ko'rib chiqish amaliyoti haqida ochiqchasiga yozgan. Fikrlash tarzini o‘zgartirish talab etiladigan eng yaxshi kod mavjud bo‘lmagan kod ekanligini tan olishdir: siz yozmaydigan har bir satr hech qachon texnik xizmat ko‘rsatish, sinovdan o‘tkazish, disk raskadrovka qilish yoki yangi ishga yollanishni tushuntirish shart emas.

.

Murakkab biznes operatsiyalarini boshqaradigan mahsulot kompaniyalari uchun muhandislikdan tashqari parallellik bir xil darajada ibratli. Kod bazasini sog'lom qiladigan bir xil tartib - muntazam tekshiruvlar, aniq egalik, hech kim foydalanmaydigan narsalarni yo'q qilish - biznes jarayonlarini ham sog'lom qiladi. Mewayzkabi platformalar korxonalarga shunday operativ ravshanlik berish uchun aniq qurilgan: qaysi vositalardan foydalanilayotgani, qaysi ish oqimlari qiymat yaratayotgani va tashkilotning o‘lik og‘irligi qayerda to‘planib borayotganining yagona ko‘rinishi. Foydalanilmayotgan dasturiy taʼminot eksportini yoki foydalanilmagan biznes jarayonlarini tekshirayotgan boʻlsangiz, asosiy intizom bir xil boʻladi.

Asboblar tezlashmoqda, fikr-mulohaza zanjirlari qattiqlashmoqda va bugungi kunda kodlar bazasi gigiyena infratuzilmasiga sarmoya kiritayotgan jamoalar yillar davomida dividendlar to‘laydigan qo‘shimcha afzalliklarni yaratmoqda. Rev-dep va uning Go-powered ishlab chiquvchi vositalari kogorti shunchaki qiziqarli mezonlar emas — ular barqaror dasturiy ta'minot tezligini ta'minlaydigan infratuzilma qatlamidir. Dasturiy ta'minot korxonalari uchun iteratsiya tezligi asosiy raqobatdosh ustunlik bo'lgan dunyoda bu periferik tashvish emas. Bu butun o'yin.

Ko'p beriladigan savollar

Nima Rev-dep-ni knip.dev-dan tezroq qiladi?

Rev-dep Go-da yaratilgan, kompilyatsiya qilingan tizim tili boʻlib, u parallellik va xom ijro tezligi uchun optimallashtirilgan, knip.dev esa Node.js-da ishlaydi. Ushbu me'moriy farq Rev-dep-ga qaramlik grafiklarini tahlil qilish va o'lik kodni 20 barobar tezroq aniqlash imkonini beradi. App.mewayz.com saytidagi Mewayz biznes OS ni quvvatlovchi 207 modulli arxitektura kabi yirik monoreposlar yoki murakkab kod bazalari uchun unumdorlikdagi farq har bir CI ishga tushirilganda saqlangan real vaqtga aylanadi.

Oddiy o'sib borayotgan loyihada qancha o'lik kod to'planadi?

Muhandislik guruhlari tomonidan olib borilgan tadqiqotlar va anekdot hisobotlari shuni ko'rsatadiki, etuk kod bazalari 10% dan 35% gacha foydalanilmagan yoki kirish imkoni bo'lmagan kodni o'z ichiga olishi mumkin. Muammo jamoalar miqyosida murakkablashadi - xususiyatlar eskiradi, API o'zgaradi va modullar tozalanmasdan tark etiladi. 207 dan ortiq biznes modullarini oyiga 19 dollar turadigan yagona operatsion tizimga birlashtirgan Mewayz kabi platformalar kodlar bazasini yaroqsiz va barqaror saqlash uchun asosan oʻlik kodni tizimli aniqlashga tayanadi.

Rev-dep JavaScript yoki TypeScript-dan foydalanmaydigan jamoalar uchun mosmi?

Rev-dep hozirda JavaScript va TypeScript ekotizimlariga qaratilgan boʻlib, u ushbu muhitlar uchun knip.dev ga toʻgʻridan-toʻgʻri muqobil qiladi. Qo'shimcha tillarni qo'llab-quvvatlash loyihaning etukligiga qarab kengayishi mumkin. Agar sizning jamoangiz veb-ga asoslangan mahsulotlar yoki SaaS vositalarini yaratsa, xuddi Mewayz app.mewayz.com saytida oʻzining toʻliq biznes operatsion tizimini taqdim etsa va sizning stekingiz JS/TS-heavy boʻlsa, Rev-dep bugungi kunda ishlab chiquvchi asboblar zanjirining bir qismi sifatida baholashga arziydi.

Mavjud CI/CD quvur liniyasiga Rev-dep-ni integratsiyalashim mumkinmi?

Ha. Rev-dep CLI vositasi sifatida ishlab chiqilgan bo'lib, mavjud linting va sinov bosqichlaringiz bilan bir qatorda istalgan CI/CD quvuriga tushishni osonlashtiradi. Uning tezligi ustunligi, ayniqsa, tezkor qayta aloqa aylanishlari ishlab chiquvchilarni kutish vaqtini qisqartiradigan avtomatlashtirilgan quvurlarda juda muhimdir. Arzon startap bilan shug‘ullanasizmi yoki oyiga $19 turadigan Mewayz biznes OS kabi to‘liq funksiyali platformani boshqarasizmi, o‘lik kod tahlilini quvur liniyasiga integratsiyalash har bir birlashmada kod bazasi gigienasiga rioya qilishga yordam beradi.