Bun có gì hot? Có thể thay thế được Node hay Deno không?

Giới thiệu Hello các bạn, mình là Toàn Hồ. Hiện tại mình đang là Frontend Engineer Là một Frontend Engineer, hàng ngày các bạn đều sẽ bắt gặp vài library mới ra đời nhằm giải quyết vấn đề abc, xyz,… Hôm nay mình sẽ giới thiệu với các bạn, không phải library, mà là javascript

Giới thiệu

Hello các bạn, mình là Toàn Hồ. Hiện tại mình đang là Frontend Engineer

Là một Frontend Engineer, hàng ngày các bạn đều sẽ bắt gặp vài library mới ra đời nhằm giải quyết vấn đề abc, xyz,…

Hôm nay mình sẽ giới thiệu với các bạn, không phải library, mà là javascript run time. Nó tên là Bun (mình nghĩ Bun trong bundler hay gì đó đại loại thế, chứ ko phải Bún, Phở đâu nha 😄)

image.png

Bun là gì?

image.png

(klq mà logo của Bun nhìn cute ghê)

Bun là javascript runtime giống như Node và Deno. Được giới thiệu là nhanh và có rất nhiều built-in function

Trước khi đi sâu hơn về Bun, mình sẽ giới thiệu một chút về javascript runtime

Javascript runtime là gì?

Warning: Có nhiều định nghĩa liên quan tới Javascript runtime, và chưa có định nghĩa hoàn chỉnh cho nó. Dưới đây là mô tả theo cách hiểu của mình, chỉ mang tính chất tham khảo

Hãy tưởng tượng Javascript là nhiên liệu (xăng, dầu,…). Trong thực tế, nhiên liệu chuyển hoá thành năng lượng nhờ vào động cơ.

Đối với Javascript, động cơ (engine) chuyển hoá nhiên liệu thành mã máy (machine code). Động cơ phổ biến nhất hiện nay là: V8 engine (Google)

image.png
Động cơ thôi là chưa đủ. Là một người bình thường, cái chúng ta cần là một loại phương tiện hoàn chỉnh. Đó có thể là xe hơi, máy bay,… với đầy đủ tính năng như: đèn, phanh, còi,…

Ở đây, javascript runtime chính là xe hơi, máy bay

Ví dụ:

  • browser runtime environment (Chrome, Firefox, Edge,…) sẽ cung cấp các APIs như: window, DOM, HTTP request,…
  • node runtime environment thì sẽ cung cấp các APIs như: process, required,….

Nhờ vào các javascript runtime environment, mà engineer mới có thể tương tác được với DOM object (frontend) hay process (backend).

Bun có gì đặc biệt?

Hiệu năng

Dưới đây là so sánh giữa Bun, Node và Deno (số liệu từ https://bun.sh/)

image.pngimage.pngimage.png

Có thể thấy Bun rất nhanh (nhanh 3 đến 4 lần khi so sánh với Node và Deno)

Bí mật đằng sau

Để đạt được tốc độ đáng kinh ngạc như vậy, thì Bun dùng JavascriptCore (from Webkit) thay vì V8 như Node và Deno.

JavascriptCore được đánh giá là nhanh hơn V8 Engine

(cho các bạn thắc mắc tại sao ngay lúc đầu thằng Node và Deno không xài JavascriptCore đi? không chắc đó có phải là lí do chính hay không, nhưng interact với V8 dễ hơn JavascriptCore)

image.png
Thêm nữa, Bun được viết bằng Zig (https://ziglang.org/) (low level programming language ra đời vào năm 2016, các bạn có thể hình dung nó giống như C hoặc Rust)

Cuối cùng, tác giả của Bun nói rằng nó có không có hidden flow, nên giúp cho việc viết phần mềm trở nên đơn giản hơn

All-in-one

  • Bun có sẵn native bundler → Chúng ta không cần dùng webpack nữa 😮
  • Bun có native transpiler → Có thể viết typescript trực tiếp, với một vài cool feature như: await function có thể nằm ở ngoài cùng của file (Deno cũng có cái này),…
  • Web APIs như: fetch, WebSocket,… đều được Bun support
  • Tương thích với NPM packages

(các bạn vào trang chủ để đọc thêm: https://bun.sh/)

Demo

image.png
(nguồn: https://twitter.com/jarredsumner/status/1449729989432074244/photo/1)

Dựa vào hình trên, có thể thấy bun create react app nhanh hơn yarn create react app 11 lần 😲

Quá khủng khiếp

Kết luận

  • Chúng ta có thể thấy Bun rất triển vọng, nhưng để thay thế được Node thì mình nghĩ là chưa. Vì Bun mới đang là beta version, cần thời gian để chứng minh độ hiệu quả.
  • Rất tốt nếu các bạn dùng Bun cho pet project, vì nó xịn như vậy, thì ngại gì không thử 😃

Nguồn tham khảo

Nguồn: viblo.asia

Bài viết liên quan

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=

Bài 1 – React Native DevOps các khái niệm và các cài đặt căn bản

Hướng dẫn setup jenkins agent để bắt đầu build mobile bằng jenkins cho devloper an t

Chuyển đổi từ monolith sang microservices qua ví dụ

1. Why microservices? Microservices là kiến trúc hệ thống phần mềm hướng dịch vụ,