Bun (oprogramowanie)
Autor | Jarred Sumner i inni |
---|---|
Pierwsze wydanie | 1.0 (8 września 2023; ponad rok temu)[1] |
Aktualna wersja stabilna | 1.1.36 (19 listopada 2024) [±] |
Język programowania | Zig |
System operacyjny | Wieloplatformowe |
Rodzaj | Środowisko uruchomieniowe |
Licencja | MIT |
Strona internetowa |
Bun (dosł. bułka) – środowisko uruchomieniowe JavaScript, menedżer pakietów, program uruchamiający testy i program opakowujący kod. Został zaprojektowany przez Jarreda Sumnera jako zamiennik i rozszerzenie dla Node.js[2][3].
Bun został zbudowany w większości przy użyciu języka programowania Zig[4][2]. Jako silnik JS używany jest JavaScriptCore z WebKit[5], czyli inaczej niż w Node.js i Deno , które używają silnika V8 z Chromium[6][7][3].
Elementy środowiska
[edytuj | edytuj kod]Bun obsługuje łączenie, minifikację i renderowanie po stronie serwera (Svelte, Nuxt.js , Vite ). Łączenie, czy opakowywanie kodu odnosi się do procesu łączenia wielu plików i zasobów, takich jak JavaScript, CSS i HTML, w jeden plik lub przynajmniej mniejszą liczbę plików, co wiąże się z ułatwieniem dystrybucji i zmniejszeniem liczby żądań serwera w celu zwiększenia wydajności strony internetowej[8].
Minifikacja to technika zmniejszenia wielkości plików z kodem poprzez zmianę kodu na krótszy, ale równoważny, czyli to kolejna metoda na zwiększenie wydajności. W wypadku Bun oprócz typowego usuwania zbędnych spacji i komentarzy, daje też możliwość skrócenia identyfikatorów, a nawet optymalizacja składni (np. łącząc statyczne ciągi znaków w jedne ciąg)[8].
Środowisko wykonawcze obsługuje m.in. SQLite3, TLS 1.3 i rozwiązywanie nazw DNS. W zestawie znajdują się również typowe narzędzia dla JS, takie jak serwer HTTP, obsługa Websocketów i haszowania[9].
Od wersji Bun 1.1 środowisko wykonawcze obsługuje system Windows w wersji 10 lub nowszej (wraz z wcześniejszym wsparciem Linuksa i MacOS)[10][11]. W 2024 wprowadzono także wieloplatformową powłokę Bun Shell do uruchamiania niektórych poleceń Bash bez konieczności instalacji dodatkowych zależności[10][11].
Wydajność
[edytuj | edytuj kod]Według stanu na sierpień 2024 roku, Bun wypada dobrze w testach wydajności zarówno pod względem instalacji zależności, jak i budowania aplikacji JS opartych np. na React czy Vue. Przykładowo, w jednym z testów wydajności polecenie bun init
wykonuje się w zaledwie 0,22 sekundy, podczas gdy npm potrzebuje na to 3,46 sekundy, a pnpm 0,29 sekundy[12].
W tych samych testach, podczas obsługi zapytań HTTP, Bun osiąga przepustowość odbioru danych na poziomie 33 MB/s i wysyłania 1,2 MB/s, w porównaniu do 16 MB/s i 553 kB/s uzyskiwanych przez Node.js. W liczbie obsługiwanych zapytań HTTP na sekundę, Bun osiąga 14 388 zapytań, znacznie przewyższając Node.js z wynikiem 6 910 zapytań na sekundę[12]. Konkretne wyniki mogą jednak zależeć od biblioteki użytej do serwowania danych – np. Fastify może nie być tak wydajny w połączeniu z Bun, jak Elysia[13].
Bun optymalizuje również wydajność testów jednostkowych napisanych dla biblioteki Jest. Wymagana jest jednak zamiana importów w plikach testów z Jest na bibliotekę Bun Test[14]. W testach z sierpnia 2024, użycie bun:test
kończy się w 0,67 sekundy przy wykorzystaniu 72% mocy procesora, w porównaniu do testów uruchamianych za pomocą npx (Node), które zajmują 3,04 sekundy przy zużyciu 472% CPU[12]. Należy jednak zwrócić uwagę, że testy napisane dla innych bibliotek, np. dla biblioteki Mocha, nie będą aż tak dobrze zoptymalizowane w Bun, ponieważ biblioteka Bun Test obsługuje tylko składnię Jest[12].
Zobacz też
[edytuj | edytuj kod]Przypisy
[edytuj | edytuj kod]- ↑ Bun 1.0. bun.sh, 2023-09-08. [dostęp 2024-06-12]. (ang.).
- ↑ a b Matthew Tyson: Explore Bun.js: The all-in-one JavaScript runtime. InfoWorld, 23 lutego 2023. [dostęp 2024-04-06]. (ang.).
- ↑ a b Mayank Choubey , The Internals of Deno [online], Tech Tonic, 6 kwietnia 2023 [dostęp 2024-04-05] (ang.).
- ↑ What is Bun?, [w:] Bun Docs, Bun [dostęp 2024-04-05] (ang.).
- ↑ Timilehin Omolana: What Is Bun.js and Why Is the JavaScript Community Excited About It?. makeuseof.com, 2022-08-02. [dostęp 2023-05-30]. (ang.).
- ↑ Craig Buckler , An Introduction to the Bun JavaScript Runtime [online], SitePoint, 26 września 2023 [dostęp 2024-04-05] (ang.).
- ↑ The V8 JavaScript Engine [online], nodejs.org [dostęp 2024-04-05] (ang.).
- ↑ a b The Bun Bundler. Bun, 2023-05-16. [dostęp 2024-04-03]. (ang.).
- ↑ Bun APIs – Runtime, [w:] Bun Docs, Bun [dostęp 2024-04-05] (ang.).
- ↑ a b Bun 1.1. Bun, 2024-04-01. [dostęp 2024-04-03]. (ang.).
- ↑ a b Tim Anderson: Bun 1.1 released with Windows support, stable WebSocket client and more • DEVCLASS. DEVCLASS, 2024-04-02. [dostęp 2024-04-03]. (ang.).
- ↑ a b c d Valletta Software Development Team , Valletta Software Development Blog [online], blog.vallettasoftware.com [dostęp 2024-09-08] (ang.).
- ↑ Mayank C., Is Bun really much faster than Node.js? [online], medium.com, 16 września 2023 [dostęp 2024-09-08] (ang.).
- ↑ Migrate from Jest to Bun's test runner. 2024. [dostęp 2024-09-08]. (ang.).
Linki zewnętrzne
[edytuj | edytuj kod]- Bun.sh – oficjalna witryna [online], Bun (ang.).
- oven-sh/bun [online], GitHub, 5 kwietnia 2024 (ang.).