Muhandislik standartlari
Keys natijani koʻrsatadi. Standartlar esa u sizning loyihangizda takrorlanadimi — shuni koʻrsatadi. Quyida biz qanday ishlashimiz; har bir band birovning reglamentidagi ibora emas, oʻz ishimizdan olingan misol bilan tasdiqlangan.
Qarorlar
Dasturlashdagi koʻpchilik muvaffaqiyatsizlik yomon kod emas — oʻlchovsiz qabul qilingan ishonchli qaror.
Avval oʻlchaymiz, keyin tuzatamiz
Sekinlik sababi haqidagi taxmin deyarli doim notoʻgʻri. Optimallashtirishdan oldin muammoni takrorlaymiz va raqam olamiz, tuzatishdan keyin — ikkinchisini.
Saytimizning birinchi ekrani 6,4 soniyada yuklanardi. Koʻrinib turgan aybdor — ogʻir 3D fon — ikkinchi darajali boʻlib chiqdi: aybdor server hammaga chizadigan qoplama edi. Tuzatish 2,2 soniya berdi; oʻlchov usuli bilan tahlil blogda.
Koddan oldin arxitektura
Tuzilma, maʼlumot va tizim chegaralari haqidagi qarorlar birinchi qatordan oldin qabul qilinadi. Hujjatni qayta yozish xizmatni qayta yozishdan arzon.
Shubha boʻlsa — sekin qurilmada tekshiring
Ishlab chiqish tez mashinalarda, foydalanish esa har xilida boʻladi. Biz sekin protsessor va yomon tarmoqda tekshiramiz.
«Zaif noutbuklarda sekinlashadi» shikoyatini dasturiy render bilan takrorladik: sahna kadri 175 ms, usiz 17 ms. Tuzatishdan keyin birinchi ekran besh oʻrniga sekundiga 104 kadr beradi.
Kod
Izoh «nima uchun»ni tushuntiradi, «nima»ni emas
Qator nima qilishi qatordan koʻrinadi. Izohda sabab boʻladi: nega shunday, avval nima sinalgan va «ravshan» yoʻl bilan qayta yozilsa nima buziladi.
Repozitoriyimizda nginx direktivasi yonida `add_header` location ichida server darajasidan meros sarlavhalarni bekor qilishi yozilgan. Bu qatorsiz keyingi odam «takroriy» sarlavhalarni olib tashlaydi va himoyani jimgina yechadi.
Bogʻliqlik oʻzini oqlashi kerak
Har bir kutubxona — mahsulotingizdagi begona kod, begona zaifliklar va begona yangilanishlar. Bitta funksiya uchun uni olmaymiz.
Tasvirlarni qayta siqish vositasi shu ish vaqtiga oʻrnatiladi va darrov bogʻliqliklardan olib tashlanadi. Xat qabul qilib javob beradigan pochta xizmati bitta bogʻliqlikda ishlaydi.
Kod yozilganidan koʻra koʻproq oʻqiladi
Bir yildan keyin uni yozmagan odam — jumladan sizning boʻlajak dasturchingiz — tushunadigan qilib yozamiz. Bu xushmuomalalik emas, egalik qilish narxi.
Tekshiruvlar
Xatoni chiqarishdan oldin ushlash eng arzon, foydalanuvchidan eshitish eng qimmat.
Har bir kommit toʻrt tekshiruvdan oʻtadi
Turlar, linter, yigʻish va kontent nazorati — oʻzgarish serverga tushishidan oldin. Oʻtmasa — chiqmaydi.
Har bir ushlangan xato regressiyaga aylanadi
Tuzatish yetarli emas: u qaytmasligi kerak. Har bir jiddiy nosozlik chiqarishdan oldin ishlaydigan tekshiruvga aylanadi.
WebGL boʻlmasa sayt butunlay boʻsh ekranga qulashi aniqlangach, uchta rad etish stsenariysini tekshiradigan skript paydo boʻldi.
Kontent kod kabi tekshiriladi
Buzilgan ichki havola, manzilsiz maqola, takroriy langar yoki juda uzun tavsif yigʻishni turlar xatosi kabi yiqitadi.
Suzuvchi test — bu xato, ob-havo emas
«Yana bir marta ishga tushiring» — javob emas. Test uch yuz yurishda bir marta yiqilsa, sababi bor: oʻsha safar operatsion tizim tanlagan aniq bajarilish tartibi.
Buning uchun ochiq kodli vosita yozdik — unflake. U jadvalni operatsion tizimdan tortib oladi: vaqt, taymerlar va tayyor kolbeklar tartibi siddan olinadi, shuning uchun yiqilish istalgan mashinada bayt-baytigacha takrorlanadi. TypeScript, MIT, bogʻliqliklarsiz, npm da chop etilgan.
Yashil yurish — dalil emas
Doim oʻtadigan testlar toʻplami xatolarni tutayotgan ham boʻlishi mumkin, umuman qaramayotgan ham — rangning oʻzidan buni ajratib boʻlmaydi. Demak, tekshiruvning oʻzini fosh qilish kerak: u yiqilishi shart boʻlgan joyda yiqilishini koʻrsatish.
Ikkita ochiq repozitoriyimiz ana shunday ushlab turiladi. bulwark — Raft konsensus algoritmi implementatsiyasi — xatolar muzeyiga ega: yettita eksponat, har biri algoritmning aynan bitta qoidasini oʻchiradi va xarness uni sid hamda buzilgan xossa nomi bilan tutishi shart. adya — tranzaksiyalar izolyatsiyasi dvigateli — har bir darajani ikki tomondan tekshiradi: u daraja oldini olishi shart boʻlgan narsani ishlab chiqarmaydi va keyingi daraja oldini oladigan narsani ishlab chiqaradi. Ikkinchi yarmisiz birinchisi boʻsh: barcha tranzaksiyalarni rad etadigan dvigatel hamma darajada «toza» boʻlardi, hech narsa topmaydigan tekshiruv esa u bilan rozi boʻlardi. Xuddi shu usul pnueli da eng uzoqqa olib borilgan: buzilgan qisqartirish ishlaydiganidek javob beradi — «buzilish topilmadi», — shuning uchun yonida toʻliq saralash qoldirilgan, sekin va xato qila olmaydigan, verdiktlar esa mos kelishi shart.
Chiqarish
Yigʻish ishlayotgan saytga xalaqit bermaydi
Yangi versiya alohida katalogda yigʻiladi va ikkita nom almashtirish bilan almashadi. Foydalanuvchi yarim yigʻilgan saytni koʻrmaydi.
Avval yigʻish ishlayotgan versiya ustida borardi va qirq soniya davomida sayt xato qaytarardi. Endi almashish millisoniyalarda.
Chiqarishdan keyin javob tekshiriladi
Yigʻish oʻtishi, ilova esa ishga tushishda qulashi mumkin. Biz oʻttiz soniya javob kutamiz.
Orqaga qaytish avtomatik
Yangi versiya javob bermasa, avvalgisi qaytadi — odamsiz va tunda qoʻngʻiroqsiz.
Oʻzgarishlar tarixi
Jurnalda «nima uchun» yoziladi
«Barqarorlik yaxshilandi» — bu yozuv emas, uning yoʻqligi. Biz muammo nima edi, qanday koʻringan va nima oʻzgargan deb yozamiz.
Versiya raqami oʻzgarish tabiatini aytadi
Tuzatish, yangi imkoniyat va mos kelmaydigan oʻzgarish kayfiyat bilan emas, raqam bilan farqlanadi.
Ataylab qilinmagani ham yoziladi
Jurnalda «ataylab qilinmadi» boʻlimi bor: u koʻrinishidan ravshan tuzatish nega xato boʻlishini tushuntiradi va keyingi odamning haftalarini tejaydi.
Topshirish
Kod va kirishlar sizniki
Manba, infratuzilma va hujjatlar mijozga topshiriladi. Mahsulot ishlashi uchun zarur hech narsani oʻzimizda qoldirmaymiz.
Server konfiguratsiyasi repozitoriyda yotadi
Administrator xotirasida yoki yozishmada emas: jangovar sozlamalar nusxasi kod yonida saqlanadi — oʻqish, koʻrikdan oʻtkazish va koʻchishda tiklash uchun.
Maxfiy kalitlar messenjerda yurmaydi
Kalitlar va parollar ombor yoki sizning konturingiz orqali uzatiladi, serverda esa repozitoriydan tashqarida yopiq huquqli fayllarda yotadi.
Biz nima qilmaymiz
Taqiqsiz qoidalar hech narsani anglatmaydi: «yaxshi kod yozamiz» bilan hamma rozi. Mana biz nimadan voz kechamiz — tezroq boʻlsa ham.
Yangilik uchun yangi freymvorkka koʻchirmaymiz
Texnologiyani almashtirish vazifa bilan oqlanadi, versiya chiqqani bilan emas. Har bir migratsiya — mijoz toʻlaydigan oylar va ishlayotgan narsadagi yangi xatolar.
Yomon xabarni yashirmaymiz
Buzilgan muddat va oʻzimizda topilgan xato haqida darrov aytamiz. Oʻz muvaffaqiyatsizligimiz tahlili raqamlari bilan blogda eʼlon qilingan.
Kuchimiz yetmasa olmaymiz
Qoʻngʻiroqdagi rad javobi mijoz uchun uch oydan keyingi qulashdan arzon. Baʼzan halol javob — «bu tizimni tuzatgandan koʻra qayta yozish foydali».
«Vaqtinchalik» yechimlarni yozib qoʻymay qoldirmaymiz
Vaqtinchalik doimiydan uzoq yashaydi. Shoshib qilingan boʻlsa — jurnalda nima va qachon qayta qilinishi kerakligi yozilgan.
Buni saytning oʻzida tekshirish mumkin
Bu yerda yozilganlarning hammasi avvalo shu saytga qoʻllanadi: oʻlchovlar, regressiyalar, chiqarishdagi orqaga qaytish, oʻzgarishlar jurnali. Raqamli tahlillar blogda — bizga yozishdan oldin oʻqish mumkin.