」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用express-fast-json-stringify 增強 Express.js 中的 JSON 序列化效能

使用express-fast-json-stringify 增強 Express.js 中的 JSON 序列化效能

發佈於2024-11-17
瀏覽:893

Enhancing JSON Serialization Performance in Express.js with express-fast-json-stringify

JSON 序列化是 Web 開發中的關鍵任務,特別是對於使用 Node.js 和 Express.js 建立的應用程式。雖然 Node.js 中的原生 JSON 序列化 (JSON.stringify()) 簡單且方便,但它可能成為效能瓶頸,尤其是在重負載下。本文介紹了express-fast-json-stringify,這是一個自訂中間件包,它利用 fast-json-stringify 顯著提高 Express 應用程式中的 JSON 序列化效能。

什麼是 fast-json-stringify?

fast-json-stringify 是由 Fastify 團隊開發的 JSON 序列化函式庫。它透過分析 JSON 模式定義並將其編譯為高度最佳化的序列化函數來提高 JSON 轉換速度。這使得它比原生 JSON.stringify() 快得多,對於高效能應用程式特別有利。

介紹express-fast-json-stringify

express-fast-json-stringify 是一個 npm 套件,可為 Express.js 應用程式帶來 fast-json-stringify 的效能優勢。透過整合此包,您可以實現更快的 JSON 序列化,從而提高應用程式的整體效能。

安裝

首先,安裝express-fast-json-stringify套件:

npm install express-fast-json-stringify

建立 JSON 架構

定義一個架構對象,用於指定 JSON 回應的結構。 fast-json-stringify 將使用此模式來最佳化序列化過程。

import { Schema } from 'express-fast-json-stringify';

const schema: Schema = {
  title: 'Example Schema',
  type: 'object',
  properties: {
    firstName: { type: 'string' },
    lastName: { type: 'string' },
    age: {
      description: 'Age in years',
      type: 'integer',
    },
  },
};

應用中介軟體

在 Express 路由中使用 fastJsonSchema 中間件,將架構物件作為參數傳遞。這將為該路由設定優化的 JSON 序列化。

import express, { Request, Response, NextFunction } from 'express';
import { fastJsonSchema, Schema } from 'express-fast-json-stringify';

const app = express();

const exampleSchema: Schema = {
  title: 'Example Schema',
  type: 'object',
  properties: {
    firstName: { type: 'string' },
    lastName: { type: 'string' },
    age: { type: 'integer' },
  },
};

app.get('/', fastJsonSchema(exampleSchema), (req: Request, res: Response, next: NextFunction) => {

});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

發送 JSON 回應

不使用預設的 res.json() 方法,而是使用中間件提供的 res.fastJson() 方法發送 JSON 回應。這利用了 fast-json-stringify 的速度優勢。

import { fastJsonSchema, Schema } from 'express-fast-json-stringify';

const schema: Schema = {
  title: 'Example Schema',
  type: 'object',
  properties: {
    firstName: { type: 'string' },
    lastName: { type: 'string' },
    age: {
      description: 'Age in years',
      type: 'integer',
    },
  },
};

app.get('/', fastJsonSchema(schema), (req, res, next) => {
  try {
    const data = {
      firstName: 'Simone',
      lastName: 'Nigro',
      age: 40,
    };
    res.fastJson(data);
  } catch (error) {
    next(error);
  }
});

性能優勢

使用express-fast-json-stringify 可以提供多種效能優勢:

  1. 速度提高:fast-json-stringify 序列化 JSON 資料的速度比 JSON.stringify() 快得多,特別是對於複雜的 JSON 物件。
  2. 減少 CPU 使用率:更快的序列化意味著處理上花費的 CPU 時間更少,從而使您的伺服器能夠處理更多並發請求。
  3. 一致性與驗證:透過定義 JSON 模式,您可以確保序列化資料遵循預先定義的結構,從而提高資料一致性並減少錯誤的可能性。

結論

將 express-fast-json-stringify 整合到 Express.js 應用程式中可以提供顯著的效能改進,特別是在 JSON 序列化成為瓶頸的情況下。透過利用 fast-json-stringify 的強大功能,您可以實現更快的回應時間並處理更高的負載,從而使您的應用程式更加高效和可擴展。

要開始使用express-fast-json-stringify,請按照本文中概述的步驟操作,並享受 Express 應用程式中更快的 JSON 序列化的好處。如需現場演示,您可以查看 StackBlitz 演示。

版本聲明 本文轉載於:https://dev.to/nigrosimone/enhancing-json-serialization-performance-in-expressjs-with-express-fast-json-stringify-64g?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何從 MySQL 中的多個欄位中選擇不同的值組合?
    如何從 MySQL 中的多個欄位中選擇不同的值組合?
    在MySQL 中從多列中選擇不同的值使用資料庫時,通常需要從多列中檢索唯一的值組合。但是,使用 DISTINCT 關鍵字可能無法總是產生所需的結果。本文探討了從 MySQL 資料庫中的兩列中選擇不同值的另一種方法。 考慮以下名為「foo_bar」的表格:foo欄accccfd ]acacafcacd...
    程式設計 發佈於2024-11-17
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-17
  • 如何使用 Goose 解決 PostgreSQL 函數中的“未終止的美元引用字串”錯誤?
    如何使用 Goose 解決 PostgreSQL 函數中的“未終止的美元引用字串”錯誤?
    未終止的美元引用字串:用分號解決錯誤在使用Goose 創建PostgreSQL 函數的上下文中,本文解決了一個錯誤在處理函數體內的複雜語句時遇到。 pq 庫報告的錯誤表明美元引用的字串仍未終止。 要解決此問題,請注意以分號為特徵的複雜語句需要使用“-- goose StatementBegin”和“...
    程式設計 發佈於2024-11-17
  • 如何從 PHP 網站執行 Java 程式?
    如何從 PHP 網站執行 Java 程式?
    從PHP 網站利用Java 的運算能力肩負著讓您的網站使用者能夠從內部執行Java 程式的使命瀏覽器中,本指南將深入研究連接這兩個世界的複雜性。 從PHPPHP 值得信賴的 exec() 函數成為彌補這一差距的首選武器。它使您能夠在 PHP 的懷抱中呼叫帶有參數的任何 Java 程式。像這樣的簡單語...
    程式設計 發佈於2024-11-17
  • 了解堆疊資料結構:在 JavaScript 中實作堆疊的逐步指南
    了解堆疊資料結構:在 JavaScript 中實作堆疊的逐步指南
    堆栈是一种简单的线性数据结构,其工作原理就像一堆盘子?️。它遵循后进先出 (LIFO) 原则。将其视为一堆盘子:您只能添加或删除堆顶部的盘子。 为了更好的理解栈,让我们来一次短暂的想象之旅吧?. 想象一下您在一家高档餐厅??️,厨房工作人员正在为忙碌的夜晚做准备??‍?。在餐具区,有一大堆盘子等待使...
    程式設計 發佈於2024-11-17
  • 如何在不使用 if/else 語句的情況下在 CSS 中實作條件邏輯?
    如何在不使用 if/else 語句的情況下在 CSS 中實作條件邏輯?
    CSS 中的條件語句:另一種方法在現代Web 開發中,基於動態變數無縫調整使用者體驗至關重要。 CSS 雖然在樣式方面功能強大,但缺乏 if/else 等傳統條件語句。然而,有幾種替代方法可以實現類似的功能。 一種方法是利用類別。透過使用特定類別操作 HTML 元素,您可以根據這些類別的存在或不存在...
    程式設計 發佈於2024-11-17
  • 如何使用 zip 套件輕鬆解壓縮 Go 中的檔案?
    如何使用 zip 套件輕鬆解壓縮 Go 中的檔案?
    使用 Go 輕鬆解壓縮使用 zip 包,在 Go 中解壓縮檔案變得輕而易舉。它的簡單性允許您創建如下所示的實用函數:func Unzip(src, dest string) error { r, err := zip.OpenReader(src) if err != nil { ...
    程式設計 發佈於2024-11-17
  • Kotlin Null Safety 與 Java:錯誤喜劇(但主要是在 Java 中)
    Kotlin Null Safety 與 Java:錯誤喜劇(但主要是在 Java 中)
    啊,Kotlin 空安全 vs. Java!一場經典的對決,就像哥吉拉與摩斯拉一樣,但摧毀城市的怪物更少,更多的是關於……好吧,無。 ? Java,祝福它的心臟,從撥號時代就已經存在了。當時,沒有人擔心 null 會導致您的應用程式崩潰,因為說實話,網路導致您的應用程式崩潰的情況要普遍得多。但時...
    程式設計 發佈於2024-11-17
  • 為什麼我的 @font-face EOT 字體無法在 IE 7、8 和 9 中透過 HTTPS 載入?
    為什麼我的 @font-face EOT 字體無法在 IE 7、8 和 9 中透過 HTTPS 載入?
    @font-face EOT 無法透過HTTPS 載入問題排查在IE 7,8 中透過HTTPS 載入@font-face EOT 字體時遇到困難,9?難題不在於HTML 頁面的HTTPS 狀態,而是透過HTTP 本身載入EOT 字型。儘管收到了適當的內容類型標頭,EOT 字體仍然難以捉摸。 調查問題...
    程式設計 發佈於2024-11-17
  • 將物件指派為 Null 實際上會影響 Java 中的垃圾收集嗎?
    將物件指派為 Null 實際上會影響 Java 中的垃圾收集嗎?
    在Java 中將物件指派為Null 對垃圾收集的影響在Java 中將未使用的物件參考指派為null 對垃圾收集的影響最小過程。現代 Java 垃圾收集器 (GC) 可以有效地運行並迅速刪除不再可達的對象,即使沒有明確 null 賦值也是如此。 但是,在某些例外情況下,顯式null 賦值可能會帶來好處...
    程式設計 發佈於2024-11-17
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1和$array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建構一...
    程式設計 發佈於2024-11-17
  • 如何在沒有循環的情況下有效計算 Numpy 中一維數組的滾動標準差?
    如何在沒有循環的情況下有效計算 Numpy 中一維數組的滾動標準差?
    在Numpy 中實現一維數組的高效滾動視窗滾動視窗的概念涉及迭代資料序列並應用計算指定視窗長度內的資料子集。在給定的上下文中,任務是在不使用 Python 循環的情況下計算 Numpy 中一維數組的滾動標準差。 雖然可以使用 Numpy.std 輕鬆獲得標準差,但滾動視窗部分構成了一個挑戰。然而,透...
    程式設計 發佈於2024-11-17
  • 如何在 jQuery 中選擇具有特定背景顏色的 Span?
    如何在 jQuery 中選擇具有特定背景顏色的 Span?
    定位具有特定背景顏色的元素處理 div 內的跨度集合時,目標可能是隔離具有特定背景顏色的元素。雖然 [attribute=value] 選擇器可能看起來很直觀,但事實證明它對於根據背景顏色提取元素是無效的,因為 span 缺少該名稱的屬性。 相反,請考慮 CSS 選擇器 $('div# so...
    程式設計 發佈於2024-11-17
  • 在 PHP 中使用綁定 SQL 變數如何提高程式碼安全性、效能和可維護性?
    在 PHP 中使用綁定 SQL 變數如何提高程式碼安全性、效能和可維護性?
    PHP 中的綁定SQL 變數:指南儘管SQL 字串很流行,但您可以透過綁定變數來增強程式碼。這樣做可以帶來許多好處,包括提高安全性、效能和可維護性。在 PHP 中,綁定變數可以毫不費力地完成,讓您能夠編寫更安全、更有效率、更易讀的程式碼。 MySQL 和 PostgreSQL 綁定技術適用於 MyS...
    程式設計 發佈於2024-11-17
  • 如何使用 Go 的 pq 套件將資料從 STDIN 匯入到 PostgreSQL?
    如何使用 Go 的 pq 套件將資料從 STDIN 匯入到 PostgreSQL?
    如何將行從 STDIN 匯入到 Postgresql? [重複]在 Go 中,您可以使用 pq 套件將行從 STDIN 匯入到 PostgreSQL。以下是逐步解決方案:第 1 步:準備資料庫連線import ( "database/sql" "gith...
    程式設計 發佈於2024-11-17

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

Copyright© 2022 湘ICP备2022001581号-3