Bun

Bun v0.2.1


Jarred Sumner · October 19, 2022

升級方法

bun upgrade

安裝方法

curl https://bun.dev.org.tw/install | bash

如果您在升級時遇到任何問題

WebSocket 伺服器

Bun.serve() 現在內建支援伺服器上的 WebSocket

Bun.serve({
  websocket: {
    message(ws, message) {
      ws.send(message);
    },
  },

  fetch(req, server) {
    // Upgrade to a ServerWebSocket if we can
    // This automatically checks for the `Sec-WebSocket-Key` header
    // meaning you don't have to check headers, you can just call `upgrade()`
    if (server.upgrade(req))
      // When upgrading, we return undefined since we don't want to send a Response
      return;

    return new Response("Regular HTTP response");
  },
});

如需更多關於在 Bun.serve() 中使用 WebSocket 的資訊,請參閱 readme 檔案

在 Linux 上建立聊天室

chat room benchmark linux

若要在您自己的電腦上重現此基準測試,請前往這裡

Bun 的伺服器端 WebSocket 由 uWebSockets 提供技術支援。

RegExp 後向斷言修復

為了處理 #314,Bun 現在包含一個備用的 RegExp 實作,它使用 Oniguruma regex 引擎。感謝 @dylan-conway

RegExp 後向斷言被熱門的 npm 套件使用,例如 Discord.js

當在 Bun 的執行環境中使用帶有後向斷言的 RegExp 字面量時,Bun 的轉譯器現在會自動將其替換為 Bun.OnigurumaRegExp。此 API 不適用於轉譯器之外,一旦 JavaScriptCore 原生支援後將會移除

當在 Bun 的 JavaScript 執行環境中執行時,此輸入

export default /\d+(?=%)/;

轉譯為

export default new globalThis.Bun.OnigurumaRegExp("\\d+(?=%)");

RegExp polyfill 主要基於 JavaScriptCore 自己的 JSC::RegExp 綁定。

更多內容

  • 在 HTTP 回應中傳送 Date 標頭
  • performance.timeOrigin 已實作
  • 當 Bun 在啟動時沒有 script 以外的參數時 (例如 bun foo.js),process.argv 會回傳一個空陣列 (感謝 @dylan-conway 的修復)
  • 修復 BodyMixin 函式拋出錯誤時的崩潰問題
  • 修復 HTTP 伺服器中與 Promise 相關的記憶體洩漏問題
  • 修復 v0.2.0 的回歸錯誤,其中小型緩衝 (非串流) HTTP 回應主體有時會因為記憶體別名錯誤而包含無效資料
  • 修復 Bun 的 WebSocket 客戶端中的 pong 控制框架有時會將 WebSocket 置於錯誤狀態的錯誤 https://github.com/oven-sh/bun/commit/c6fe82018aeda88a3337a5355313de7db68ef827
  • 修復 WebSocket 客戶端不會保持程序開啟的錯誤 - #1335
  • 由於新增了伺服器端 WebSocket,Bun 的客戶端 WebSocket 實作有更多測試覆蓋率
  • 為 Bun 的 JavaScriptCore 綁定生成器新增 DOMJIT 函式呼叫支援 (由新的 ServerWebSocket 物件用於 publishTextpublishBinarysendTextsendBinary 函式)

完整變更日誌