deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Benchmark: oxlint, Vue core üzerinde ESLint'i 18 kat, type-aware kurallarla 13 kat geçiyor

dev.to'da yayımlanan bir benchmark, Vue core'un 445 TypeScript dosyasında oxlint'i 0,24 saniyede, ESLint'i ise 4,4 saniyede tamamladığını ölçtü; type-aware kurallar açıkken oxlint bir saniyenin altında kalırken ESLint 12 saniyeye ihtiyaç duydu.

Benchmark: oxlint, Vue core üzerinde ESLint'i 18 kat, type-aware kurallarla 13 kat geçiyor

dev.to'da yayımlanan uygulamalı bir benchmark, oxlint'i Vue'nun core deposu üzerinde ESLint ile karşılaştırdı ve Vue ile Vite'nin yaratıcısı Evan You tarafından kurulan VoidZero şirketinin Rust tabanlı linter'ının bir mertebem hızlı olduğunu ortaya koydu. Daha da önemlisi, her iki araçta da type-aware kurallar etkinleştirildiğinde bile bu fark korundu.

Ne ölçüldü

Yazar, Vue core'un bir klonunu — 445 TypeScript dosyası, kabaca 150.000 satır — temiz bir Node 20 container'ında lintledi ve tekrarlanan çalıştırmaların duvar saati ortancasını raporladı. Dört konfigürasyon test edildi: typescript-eslint'nin recommended kurallarıyla ESLint 9, aynı kurulum recommendedTypeChecked setiyle, varsayılan ayarlarıyla oxlint ve --type-aware bayrağıyla oxlint.

Sonuçlar: ESLint sözdizimsel geçişi 4,4 saniyede, oxlint ise 0,24 saniyede tamamladı — on sekiz katlık bir fark. Gönderiye göre oxlint'ın kendi çalıştırma çıktısı, engine süresini 75 milisaniye olarak gösteriyor; yani 0,24 saniyenin çoğu, lintlemenin kendisine değil Node'un başlamasına ve npx'in binary'yi çözmesine gitti.

Asıl test type-aware kurallardı

no-floating-promises, no-misused-promises ve await-thenable gibi kurallar, anlamlı hataları yakalayan denetimlerdir ve bir değerin gerçekte ne olduğunu bilen bir type checker'a ihtiyaç duyarlar. Onları pahalı yapan da budur: ESLint, tek bir satırı lintleyebilmeden önce eksiksiz bir TypeScript programı inşa etmek zorundadır ve bu kod tabanında recommendedTypeChecked çalıştırması 12 saniye sürdü — sözdizimsel geçişinin neredeyse üç katı.

Yazar, oxlint'ın bu sınıf işi atlayacağını bekliyordu — yaygın varsayım, hızlı linter'ların ucuz sözdizimsel denetimleri hallettiği ve type-aware analizi ESLint'e bıraktığı yönündeydi. Bu varsayım ayakta kalamadı. Tip tabanlı kuralları tsgolint adlı yardımcı bir araç üzerinden çalıştıran oxlint'ın --type-aware bayrağı, aynı ağacı 0,9 saniyede tamamladı. Başka bir deyişle, tam tip analiziyle oxlint, ESLint'ın yalnızca sözdizimsel çalıştırmasından hâlâ yaklaşık beş kat, karşılaştırılabilir bir type-aware iş yükünü ESLint'ten kabaca on üç kat daha hızlı tamamladı.

Uyarılar

Benchmark, rakamların neyi gösterip neyi göstermediği konusunda özenli. Kural setleri birebir aynı değil: oxlint varsayılan geçişinde 96, type-aware etkinleştirilmişken 111 kural çalıştırdı; typescript-eslint'nin setlerinin ise kendi sayıları var, dolayısıyla karşılaştırma birebir aynı denetimler yerine karşılaştırılabilir kapsamı ölçüyor. Type-aware mod deneyseldir, bir bayrağın arkasındadır ve 0,9 saniyelik rakamın yeniden üretilebilmesi için önce ayrı bir paket olan oxlint-tsgolint'in kurulması gerekir.

Daha derin bir kayıt daha var: tsgolint, TypeScript type checker'ının Go tabanlı bir yeniden uygulamasıdır, tsc'nin kendisi değildir. Yazar bunu lintleme hızı için makul bir takas olarak niteliyor; ama tam da bu tür bir fark, CI'da güvenmeden önce kendi kod tabanınıza karşı test edilmesini gerektiren cinsten. Ve bir proje oxlint karşılığı olmayan belirli bir ESLint kuralına ya da özel bir plugine bağımlıysa, hiçbir hız rakamı eksik denetimin yerini tutmaz.

Neden önemli

Lintleme hızı, bir linter'ın iş akışında nerede yaşayacağını belirler. Çalıştırma başına dört ila on iki saniyede lintleme CI'ya ertelenir ve pre-commit hook'ları --no-verify ile atlatılmaya meyillidir. Bir saniyenin altındaki maliyette aynı denetimler editörlerde, hook'larda ve ilk CI adımı olarak çalışabilir ve kimse onları atlama konusunda cazip hissetmez.

Yazarın önerdiği kurulum, toptan bir değişim yerine katmanlı: oxlint'ı hook'larda ve erken CI aşamalarında her zaman açık hızlı kapı olarak çalıştırın; daha yavaş bir şey başlamadan önce sorunların büyük çoğunluğunu yakalayın ve yalnızca ESLint'in sunduğu belirli kurallar ve pluginler için ESLint'i tutun, her kayıtta değil CI'da bir kez çalıştırın. Araç kararlarını tartan TypeScript ekipleri için daha geniş çıkarım şu: type-aware lintlemenin artık yavaş olması gerekmiyor — tabii deneysel, tsc tabanlı olmayan bir type checker'ı kendi kodlarına karşı doğrulamaktan memnuniyet duyarlarsa.

  • #oxlint
  • #eslint
  • #typescript
  • #linting
  • #developer-tools

İlgili yazılar