Bun ( 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.
Bun został zbudowany w większości przy użyciu . Jako silnik JS używany jest JavaScriptCore z WebKit, czyli inaczej niż w Node.js i , które używają silnika V8 z Chromium.
Elementy środowiska Bun obsługuje łączenie, minifikację i renderowanie po stronie serwera (Svelte, , ). Łą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.
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).
Ś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.
Od wersji Bun 1.1 środowisko wykonawcze obsługuje system Windows w wersji 10 lub nowszej (wraz z wcześniejszym wsparciem Linuksa i MacOS). W 2024 wprowadzono także wieloplatformową powłokę Bun Shell do uruchamiania niektórych poleceń Bash bez konieczności instalacji dodatkowych zależności.
Wydajność Według stanu na sierpień 2024 roku, 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.
W tych samych testach, podczas obsługi zapytań HTTP, 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ę, osiąga 14 388 zapytań, znacznie przewyższając Node.js z wynikiem 6 910 zapytań na sekundę. Konkretne wyniki mogą jednak zależeć od biblioteki użytej do serwowania danych – np. może nie być tak wydajny w połączeniu z , jak .
optymalizuje również wydajność testów jednostkowych napisanych dla biblioteki Jest. Wymagana jest jednak zamiana importów w plikach testów z na bibliotekę . 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. Należy jednak zwrócić uwagę, że testy napisane dla innych bibliotek, np. dla biblioteki Mocha, nie będą aż tak dobrze zoptymalizowane w , ponieważ biblioteka obsługuje tylko składnię .
Zobacz też Node.js
Przypisy
Linki zewnętrzne
Kategoria:JavaScript Kategoria:Oprogramowanie na licencji MIT