Bun 能否取代 Nodejs ? 誰才是JavaScript Runtime 最后的王者?
Nodejs 的出現(xiàn),為前端帶來無限可能;一經(jīng)問世,前端的工作方式發(fā)生了翻天覆地的變化;沒想到第一個被干掉的竟然是當年前端界的扛把子“Jquery”;
隨著Npm包的不斷增長,龐大的node_modules就像一座大山,讓開發(fā)者喘不過氣。
寫過NodeJS的同學都會有一個體會,自己只寫了幾行代碼,但是要安裝的包竟然達到幾個G,可能有些夸張,但是大量的node_modules真的很令人崩潰。
就在nodejs讓人頭疼的時候,一款號稱“nodejs 殺手”的替代品“bun”出現(xiàn)了。
據(jù)Bun官方介紹,Bun 是一種 “all-in-one” 的JavaScript運行時。
有沒有被震撼到,all-in-one!當我試著使用了Bun一段時間之后,得到了一個結(jié)論。
這玩意確實很厲害,但是似乎又缺點什么。
既然Bun 這么厲害,那么它都有哪些獨特之處呢?
Bun 特性:
- 快速啟動。它在本地計算機、服務(wù)器或邊緣運行您當前的 JavaScript 和 TypeScript 應(yīng)用程序或腳本。
- 快速運行性能。Bun 并沒有采用V8,而是使用了更快的JavaScriptCore。
- 凝聚力。Bun 是一個完整的工具包,包括捆綁器、轉(zhuǎn)譯器和包管理器。
從bun 公布的測試結(jié)果,server端渲染來看,bun 確實比nodejs、deno快至少3倍以上。
當然Bun作為“nodejs 替代者”;
還包含了以下特性:
- 實現(xiàn)了Web Api,可以獲取WebSocket和ReadableStream
- 實現(xiàn)Node的node_modules解析算法,你可以在bun中直接使用npm包
- 內(nèi)置轉(zhuǎn)移器,轉(zhuǎn)譯每個文件,TypeScript和JSX可以直接使用。
- 支持,來自"paths""jsxImportSource"tsconfig json文件。
- 自動從.env文件加載環(huán)境變量
- 內(nèi)置bun:sqlite
- 實現(xiàn)了大部分Node-API,所以很多原生Node.js模塊都可以正常工作。
從以上特性來看,bun 所要做的不光光是解決JavaScript runtime的問題,更是要把之前nodejs 支持的特性全部兼容;所以才有了“all-in-one”的口號。
當然,除了這些優(yōu)點,bun 目前還有很多問題待解決;
最大的一個問題是Bun目前使用的zig開發(fā)語言也正在開發(fā)期,目前最新的版本還在beta,未正式發(fā)布,前途未卜。
第二個比較大的問題是bun目前只支持 mac、linux、windows下需要使用 WSL!
我想說,難道bun的作者是忽略了windows用戶還是自己只有mac?
還有更大的一個問題是bun 的生態(tài)系統(tǒng)如何建立? 是繼續(xù)使用Npm?
不過話說回來,Bun 還很年輕,從目前來看,它的優(yōu)勢也很明顯;
未來一切順利的話,也許JavaScript最佳運行時會被易主。