」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 高效能 Node.js 靜態檔案服務 — 使用 Rust

高效能 Node.js 靜態檔案服務 — 使用 Rust

發佈於2024-11-04
瀏覽:381

幾個月前,我們發布了 Encore.ts — TypeScript / Node.js 的開源後端框架。

由於已經有很多框架,我們想分享我們所做的一些異常設計決策以及它們如何提高效能和開發人員體驗。

在 Node.js 中提供靜態文件,使用 Rust 獲得高效能

Encore.ts 內建支援提供靜態資源(例如圖片、HTML 和 CSS 檔案以及 JavaScript 檔案)。

當您想要提供靜態網站或已預先編譯為靜態檔案的單頁應用程式 (SPA) 時,這非常有用。

定義靜態檔案時,這些檔案直接從 Encore.ts Rust 執行時提供。

這意味著不會執行 JavaScript 程式碼來服務文件,從而釋放 Node.js 運行時以專注於執行業務邏輯。

High performance Node.js static file serving — using Rust

這大大加快了靜態檔案服務速度,並改善了 API 端點的延遲。

我們最近發布了基準測試,顯示它比基於 Express.js 的 Node 應用程式快 9 倍。

在文件中了解更多

範例應用程式展示如何使用 Encore.ts 提供靜態檔案

程式碼範例

在 Encore.ts 中提供靜態檔案的工作方式與定義 API 端點類似,但使用 api.static 函數而非普通的 api 函數。

import { api } from "encore.dev/api";

export const assets = api.static(
  { expose: true, path: "/frontend/*path", dir: "./assets" },
);

這將提供 /frontend 路徑前綴下 ./assets 目錄中的所有檔案。

Encore 會自動在目錄的根目錄下提供index.html 檔案。在上面的範例中,這意味著請求URL /frontend 將提供文件./assets/index.html,/frontend/hello 將提供文件./assets/hello 或./assets/hello/index.html (存在者為準)。

總結

透過將基於 Rust 的執行時間與 Node.js 一起使用,Encore.ts 能夠提高 TypeScript 應用程式的效能。

如果效能對您的專案很重要,嘗試 Encore.ts 可能是個好主意。

而且它都是開源的,因此您可以查看程式碼並在 GitHub 上做出貢獻。

版本聲明 本文轉載於:https://dev.to/encore/high-performance-nodejs-static-file-serving-using-rust-420m?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-09
  • 如何從 ASP.NET Core Web API 控制器傳回檔案?
    如何從 ASP.NET Core Web API 控制器傳回檔案?
    在ASP.NET Core Web API 中處理文件下載嘗試從ASP.NET Web API 控制器返回文件時,您可能會遇到以下問題:響應被視為JSON。要解決此問題,了解在 ASP.NET Core 中下載檔案的正確方法至關重要。 要在 ASP.NET Core Web API 中傳回文件,您需...
    程式設計 發佈於2024-11-09
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-09
  • 如何將移動站點限制為橫向並停用自動旋轉?
    如何將移動站點限制為橫向並停用自動旋轉?
    增強行動網站體驗:強制橫向方向並停用自動旋轉在設計行動響應能力時,某些方向可能會對用戶產生重大影響經驗。此問題尋求一種解決方案,將行動網站限制為橫向並停用自動旋轉。 CSS 解決方案實現此目的的一種方法是透過 CSS 媒體查詢。透過為橫向和縱向建立單獨的樣式表,您可以根據裝置的方向控制網站的行為。實...
    程式設計 發佈於2024-11-09
  • Mac OS X 上的 Python 專案創建
    Mac OS X 上的 Python 專案創建
    介紹 PyFabricate 是一款 Mac OS X 應用程序,可簡化 Python 專案的建立。 自從我創作它以來,顯然它是我認為 Python 專案應該是什麼樣子的一個固執己見的版本。 此外,我還有一個特定的工具集,可以用來編寫 Python Mac OS X 應用程式。...
    程式設計 發佈於2024-11-09
  • 如何修復 PHP 中的「嘗試取得非物件的屬性」錯誤?
    如何修復 PHP 中的「嘗試取得非物件的屬性」錯誤?
    解決PHP 中的“嘗試獲取非對象的屬性”錯誤使用PHP 時,您可能會遇到錯誤“嘗試獲取非物件的屬性」獲得非物體的財產。 「當嘗試存取尚未正確初始化或為null 的物件的屬性時,通常會發生此錯誤。 在提供的程式碼的情況下,問題在於從資料庫取得側邊選單資料。mysql_fetch_object() 函數...
    程式設計 發佈於2024-11-09
  • ## 如何修改 Python 原始碼,同時保留格式和註解?
    ## 如何修改 Python 原始碼,同時保留格式和註解?
    使用AST 修改Python 原始碼使用AST 修改Python 原始碼解析、修改和寫回Python 原始碼對於突變測試等任務來說是一項很突變測試等任務來說是一項很有價值的任務。雖然標準 Python 模組提供了解析和編譯程式碼的方法,但它們缺乏修改和重寫原始程式碼的能力。 為了滿足這一需求,一些庫...
    程式設計 發佈於2024-11-09
  • 如何使用 JavaScript 根據另一個下拉清單中的選擇填入下拉清單?
    如何使用 JavaScript 根據另一個下拉清單中的選擇填入下拉清單?
    使用JavaScript 根據另一個下拉列表中的選擇填充一個下拉列表當面臨根據另一個下拉列表中的選擇動態更新一個下拉列表中的選項的任務時,它是對於避免不必要的複雜性(例如資料庫查詢)至關重要。讓我們探索一個簡單的基於 JavaScript 的解決方案,無需 AJAX 呼叫即可完成此任務。 為了說明此...
    程式設計 發佈於2024-11-09
  • 如何從具有不同數組長度的字典創建 Pandas DataFrame?
    如何從具有不同數組長度的字典創建 Pandas DataFrame?
    從條目長度不均勻的字典建立 DataFrame在 Python 中,可以從每個條目保存一個 Numpy 陣列的字典建立 DataFrame。然而,當條目之間的數組長度不同時,就會出現挑戰。預設情況下,Pandas 需要統一長度的數組,從而導致類似“ValueError: arrays must al...
    程式設計 發佈於2024-11-09
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-09
  • 為什麼在 Java 中使用相同的種子時會得到相同的隨機數?
    為什麼在 Java 中使用相同的種子時會得到相同的隨機數?
    具有固定種子的Java隨機數:為什麼輸出相同? 在您的程式碼中,您定義了一種使用以下命令產生隨機數的方法指定的種子。但是,您會注意到,當您提供相同的種子時,所有 100 個產生的數字都是相同的。 此行為是預期的,因為在 Random 建構函式中使用相同的種子會產生可預測的數字序列。種子是初始化隨機數...
    程式設計 發佈於2024-11-09
  • jQuery Chaining 如何簡化開發並提高程式碼效率?
    jQuery Chaining 如何簡化開發並提高程式碼效率?
    理解 jQuery 中的物件和方法連結在 jQuery 中,連結允許在單一語句中串聯多個 jQuery 方法。這使開發人員能夠簡化程式碼並輕鬆執行複雜的操作。 連結的基本原理涉及每個 jQuery 方法的回傳值。當呼叫 jQuery 方法時,它通常會傳回一個表示所選元素的 jQuery 物件。這允許...
    程式設計 發佈於2024-11-09
  • Hono.js 基準測試:Node.js、Deno 和 Bun — 哪個最快?
    Hono.js 基準測試:Node.js、Deno 和 Bun — 哪個最快?
    Deno 2.0 剛剛發布,並聲稱比 Bun 和 Node.js 更快,同樣,Bun 也聲稱更快。這引起了我的興趣,所以我決定測試它們的性能,看看它們在現實場景中的比較。 為了公平比較,我需要選擇一個與所有三種 JavaScript 執行時間環境(Node.js、Deno 和 Bun)相容的框架。...
    程式設計 發佈於2024-11-09
  • 何時應該使用 Tkinter 的 Entry Get 函數來有效檢索輸入?
    何時應該使用 Tkinter 的 Entry Get 函數來有效檢索輸入?
    Tkinter Entry 的Get 函數:深入探討其功能和用法在Tkinter 中,Entry 小部件通常用於收集用戶輸入以進一步收集使用者輸入然而,與Entry 關聯的get() 函數通常無法產生所需的結果,這可能會讓開發人員感到困惑。本文深入探討 get() 的概念,全面了解其執行與應用。 理...
    程式設計 發佈於2024-11-09
  • 如何克服 PHP 中日期表示的 2038 限制?
    如何克服 PHP 中日期表示的 2038 限制?
    PHP 中的日期表示:克服2038 年限制雖然PHP 的原生日期函數在2038 年有一個截止日期,但還有其他方法處理超出此限制的日期。其中一種方法是僅儲存年、月和日,而忽略小時、分鐘、秒和毫秒部分。 透過丟棄這些附加時間部分,可以顯著擴展可表示日期的範圍。這是因為這些元件中的每一個都佔用了 PHP ...
    程式設計 發佈於2024-11-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3