Чому Biome швидше за аналоги?
Чому Biome швидше?
1. Biome написаний на Rust
Головна причина - Rust.
- Rust компілюється в нативний машинний код
- Немає збирача сміття
- Висока оптимізація обчислень
- Відмінна робота з багатопоточністю
Порівняно з JavaScript (яким написані ESLint і Prettier), Rust працює:
- швидше в CPU-інтенсивних завданнях
- стабільніше при обробці великих обсягів коду
- безпечніше з погляду витоків пам'яті
Лінтинг і форматування - якраз CPU-heavy завдання, тому Rust є ідеальним вибором.
2. Єдиний високопродуктивний парсер
Biome використовує один спільний парсер (для JS, TS, JSX, JSON тощо).
ESLint зазвичай працює так:
- підключає зовнішній парсер (
@typescript-eslint/parser) - цей парсер перетворює код на AST
- потім плагіни ESLint читають AST
- потім правила ESLint повторно обходять AST
- потім окремий інструмент Prettier заново парсить файл
- і знову обходить AST для форматування
Тобто код парситься кілька разів різними інструментами.
У Biome навпаки:
- один універсальний парсер
- одне AST
- один прохід
- мінімум додаткових шарів
Один прохід по дереву замість 2-4 у ESLint/Prettier.
3. Жодного динамічного завантаження плагінів
ESLint повільний, тому що:
- вимагає десятки плагінів
- кожен плагін - окрема JS-функція
- усі вони завантажуються і інтерпретуються при старті
Biome:
- майже все вбудовано
- немає важкої плагінної системи (на цей момент)
- правила оптимізовані на рівні компіляції
Менше JavaScript-коду → менше IO → менше інтерпретації.
4. Оптимізована архітектура обходу AST
ESLint:
- кожне правило самостійно ходить по AST
- правила часто повторюють роботу одне одного
- підключення 50+ правил створює 50+ обходів
Biome:
- робить централізований, оптимізований обхід дерева
- використовує статичні перевірки на етапі компіляції
- мінімізує повторні обходи
Один обхід замість безлічі - величезна економія часу.
5. Відсутність обмежень Node.js
Node.js:
- повільний при важких обчисленнях
- має обмеження однопоточності
- страждає від високої вартості операцій GC
Biome:
- використовує можливості Rust для паралелізму
- працює з пам'яттю напряму
- не залежить від V8 і його обмежень
Rust краще підходить для інтенсивних завдань парсингу і аналізу.
6. Мінімум конфігурації = мінімум роботи
ESLint:
- навіть базова конфігурація використовує:
- парсер
- конфіг Airbnb/Next/React
- лінтери для імпортів
- лінтери для TS
- інтеграцію з Prettier
Усе це завантажується і аналізується перед запуском.
Biome:
- один конфіг
- жодних сторонніх розширень, крім core rules
- оптимізація на рівні бінарників
Швидший старт, менше коду, менше шарів.
7. Форматер вбудований, а не окремий процес
Prettier - окремий інструмент. ESLint - окремий інструмент. Вони ніяк не оптимізують роботу одне одного.
Biome:
- форматер - частина одного рушія
- немає зайвої роботи з повторного парсингу
- немає конфліктів між форматером і лінтером
2 інструменти → 1 рушій → 1 прохід → швидше.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.