精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何優化你的 Node.js API

開發 前端
在這篇文章中,我將講解如何優化使用 Node.js 編寫的 API。

前提條件

想要充分了解本文內容,你必須了解以下概念:

  • Node.js 的設置與安裝
  • 如何使用 Node 創建 API
  • 如何使用 Postman
  • JavaScript 的 async/await 工作原理
  • Redis 的基礎操作

API 優化到底指的是什么

優化包含了改善 API 的響應時間。響應時間越短,API 的速度越快。

我將在本文分享一些技巧,幫助你縮短響應時間、降低延遲、管理錯誤和吞吐量,并且最大限度地減少 CPU 和內存的使用。

如何優化 Node.js 的 API

1. 始終使用異步函數

異步函數就像 JavaScript 的心臟。因此,優化 CPU 使用率的最佳方法就是編寫異步函數來執行非阻塞 I/O 操作。

I/O 操作包括對數據的讀和寫。它可以在數據庫、云存儲或者任何本地磁盤上進行。

在大量使用 I/O 操作的應用使用異步函數可以提高效率。因為由于沒有阻塞 I/O,當一個請求在做輸入/輸出操作的時候,CPU 可以同時處理多個請求。

舉例如下:

var fs = require('fs');
// 執行阻塞I/O
var file = fs.readFileSync('/etc/passwd');
console.log(file);
// 執行非阻塞I/O
fs.readFile('/etc/passwd', function(err, file) {
if (err) return err;
console.log(file);
});
  • 使用 Node 包fs來處理文件
  • readFileSync()是同步函數,會在執行完成前阻塞線程
  • readFile()是異步函數,會立刻返回并在后臺運行

2. 避免在 API 中使用 session 和 cookie,僅在 API 響應中發送數據

當我們使用 cookie 或者 session 來存儲臨時狀態的時候,會占用非常多的服務器內存。

現在通用無狀態 API,并且也有 JWT、OAuth 等驗證機制。驗證令牌保存在客戶端以便服務器管理狀態。

JWT 是基于 JSON 的用于 API 驗證的安全令牌。JWT 可以被看到,但一旦發送就無法修改。JWT 只是一個序列并沒有加密。OAuth 不是 API 或服務——相反,它是授權的開放標準。OAuth 是一組用于獲取令牌的標準步驟。

同時,也不要把時間浪費在使用 Node.js 來服務靜態文件。這方面 NGINX 和 Apache 做得更好。

使用 Node 搭建 API 的時候,不要在響應中發送完整的 HTML 頁面。當僅有數據通過 API 發送的時候,Node 服務得會更好。大部分 Node 應用都使用 JSON 數據。

3. 優化數據庫查詢

優化 Node API 的重要一環是優化查詢。特別是對于大型應用來說,我們需要多次查詢數據庫,所以一個糟糕的查詢會降低應用的整體性能。

索引是一種優化數據庫性能的方法,通過最小化處理查詢時所需的磁盤訪問次數來實現。它是一種數據結構技術,用于快速定位和訪問數據庫中的數據。索引是使用幾個數據庫列創建的。

假設我們有一個沒有索引的數據庫模式,并且數據庫包含 100 萬條記錄。與帶有索引的模式相比,使用沒有索引的模式做一個簡單的 find(查找)查詢將掃描更多的記錄來找到匹配的記錄。

  • 沒有索引的查詢
> db.user.find({email: 'ofan@skyshi.com'}).explain("executionStats")
  • 有索引的查詢
> db.getCollection("user").createIndex({ "email": 1 }, { "name": "email_1", "unique": true })
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}

兩者之間掃描文件的數量相差巨大 ~ 1038:

方法

掃描文件

沒有索引

1039

有索引

1

4. 使用 PM2 集群模式優化 API

PM2 是為 Node.js 應用程序設計的生產流程管理器。它內置了負載平衡器,允許應用程序在不修改代碼的情況下,作為多個進程運行。

使用 PM2 時的應用停機時間幾乎為零。總體來說,PM2 確實可以提升 API 性能和并發性。

在生產環境中部署代碼并運行以下命令以查看 PM2 集群如何在所有可用 CPU 上進行擴展:

pm2 start  app.js -i 0

5. 減少 TTFB(第一字節時間)

第一字節時間是一種測量方式,用作表示 Web 服務器或者其他網絡資源的響應時間。TTFB 測量從用戶或客戶發出 HTTP 請求到客戶的瀏覽器收到頁面的第一個字節的時間。

所有用戶訪問瀏覽器的同一頁面加載速度不可能在 100 毫秒之內,這僅僅是因為服務器和用戶之間的物理距離。

我們可以通過使用 CDN 和全球本地數據中心緩存內容來減少第一個字節的時間。這有助于用戶以最小的延遲訪問內容。你可以從 Cloudflare 提供的 CDN 解決方案開始著手。

6. 使用帶日志的錯誤腳本

監視 API 是否正常工作最好的辦法是記錄行為,于是記錄日志就派上用場。

一個常見的辦法是將記錄打印在控制臺上(使用console.log())。

比console.log()更高效的方法是使用 Morgan、Buyan 和 Winston。我將在這里以 Winston 為例。

如何使用 Winston 記錄 – 功能

  • 支持 4 個可以自由選擇的日志等級,如:info、error、verbose、debug、silly 和 warn
  • 支持查詢日志
  • 簡單的分析
  • 可以使用相同的類型進行多個 transports 輸出
  • 捕獲并記錄 uncaughtException

可以使用以下命令行設置 Winston:

npm install winston --save

這里是使用 Winston 記錄的基本配置:

const winston = require('winston');

let logger = new winston.Logger({
transports: [
new winston.transports.File({
level: 'verbose',
timestamp: new Date(),
filename: 'filelog-verbose.log',
json: false,
}),
new winston.transports.File({
level: 'error',
timestamp: new Date(),
filename: 'filelog-error.log',
json: false,
})
]
});

logger.stream = {
write: function(message, encoding) {
logger.info(message);
}
};

7. 使用 HTTP/2 而不是 HTTP

除了上述使用的這些技巧,我們還可以使用 HTTP/2 而不是 HTTP,因為它具備以下優勢:

  • 多路復用
  • 頭部壓縮
  • 服務器推送
  • 二進制格式

它專注提高性能,并解決 HTTP 的問題。它使網頁瀏覽更快、更容易,并且消耗更少的帶寬。

8. 并行任務

使用 async.js 來運行任務。并行任務對 API 的性能有很大改善,它減少了延遲并最大限度地減少了阻塞操作。

并行意味著同時運行多個任務。當你并行任務的時候,不需要控制程序的執行順序。

以下是一個數組異步并行的簡單例子:

const async = require("async");
// 使用對象而不是數組
async.parallel({
task1: function(callback) {
setTimeout(function() {
console.log('Task One');
callback(null, 1);
}, 200);
},
task2: function(callback) {
setTimeout(function() {
console.log('Task Two');
callback(null, 2);
}, 100);
}
}, function(err, results) {
console.log(results);
// 結果相當于: {task2: 2, task1: 1}
});

在以上例子中,我們使用了 async.js 以異步的形式執行了兩個任務。task 1 需要 200 毫秒完成,但是 task 2 不需要等待 task 1 完成后再執行 – 它在設定的 100 毫秒后執行。

并行任務對 API 的性能有很大的影響。它減少了延遲并最大限度地減少了阻塞操作。

9. 使用 Redis 緩存應用

Redis 是 Memcached 的高級版本。它通過在服務器的主內存中存儲和檢索數據來優化 API 響應時間。它提高了數據庫查詢的性能,也減少了訪問延遲。

在下面的代碼片段中,我們分別調用了不使用 Redis 和使用 Redis 的 API,并比較了響應時間。

響應時間差異巨大~ 899.37 毫秒:

方法

響應時間

不使用 Redis

900ms

使用 Redis

0.621ms

以下是不使用 Redis 的 Node:

'use strict';

//定義需要的所有依賴項
const express = require('express');
const responseTime = require('response-time')
const axios = require('axios');

//加載 Express 框架
var app = express();

//創建在響應頭中添加 X-Response-Time 的中間件
app.use(responseTime());

const getBook = (req, res) => {
let isbn = req.query.isbn;
let url = `https://www.googleapis.com/books/v1/volumes?q=isbn:${isbn}`;
axios.get(url)
.then(response => {
let book = response.data.items
res.send(book);
})
.catch(err => {
res.send('The book you are looking for is not found !!!');
});
};

app.get('/book', getBook);

app.listen(3000, function() {
console.log('Your node is running on port 3000 !!!')
});

以下是使用 Redis 的 Node:

'use strict';

//定義需要的所有依賴項
const express = require('express');
const responseTime = require('response-time')
const axios = require('axios');
const redis = require('redis');
const client = redis.createClient();

//加載 Express 框架
var app = express();

//創建在響應頭中添加 X-Response-Time 的中間件
app.use(responseTime());

const getBook = (req, res) => {
let isbn = req.query.isbn;
let url = `https://www.googleapis.com/books/v1/volumes?q=isbn:${isbn}`;
return axios.get(url)
.then(response => {
let book = response.data.items;
//設置string-key:緩存中的 isbn。以及緩存的內容: title
// 設置緩存的過期時間為 1 個小時(60分鐘)
client.setex(isbn, 3600, JSON.stringify(book));

res.send(book);
})
.catch(err => {
res.send('The book you are looking for is not found !!!');
});
};

const getCache = (req, res) => {
let isbn = req.query.isbn;
//對照服務器的 redis 檢查緩存數據
client.get(isbn, (err, result) => {
if (result) {
res.send(result);
} else {
getBook(req, res);
}
});
}
app.get('/book', getCache);

app.listen(3000, function() {
console.log('Your node is running on port 3000 !!!')
)};

總結

在本指南中,我們了解了如何優化 Node.js API 的響應時間。

JavaScript 重度依賴函數,因此,使用異步函數可以使腳本運行得更快并且不阻塞。

除此之外,我們還可以使用緩存記憶(Redis)、數據庫索引、TTFB 和 PM2 集群來提高響應速度。

最后請記住,注意路由的安全性并盡可能優化路由也很重要。我們不能為了提高 API 響應速度而妥協掉安全性。因此,在 Node.js 中構建優化的 API 時,應該保留所有標準安全檢查。

責任編輯:華軒 來源: freeCodeCamp
相關推薦

2011-09-09 14:23:13

Node.js

2023-01-10 14:11:26

2025-05-26 00:31:31

2022-03-08 15:13:34

Fetch APINode.js開發者

2024-09-25 08:04:58

2023-10-18 16:39:32

2021-11-16 08:51:29

Node JavaScript變量類型

2021-05-27 09:00:00

Node.js開發線程

2013-11-01 09:34:56

Node.js技術

2015-03-10 10:59:18

Node.js開發指南基礎介紹

2011-12-09 11:16:48

Node.js

2025-08-13 06:06:39

Node.jsAPMWorker

2023-04-19 08:31:57

Node.jsLTS版本

2021-12-25 22:29:57

Node.js 微任務處理事件循環

2020-05-29 15:33:28

Node.js框架JavaScript

2021-08-20 09:00:00

Node.js開發API

2012-02-03 09:25:39

Node.js

2023-03-02 23:09:53

Node.jsC++JS

2023-10-04 07:35:03

2025-07-24 06:54:11

Node.jsCPU負載
點贊
收藏

51CTO技術棧公眾號

激情av一区二区| 99精品一区二区三区| 久久黄色av网站| 日本成人在线免费| 久草在线资源福利站| 欧美国产一区二区| av一区二区三区免费| 中文字幕激情小说| 香蕉视频国产精品| 国产婷婷色综合av蜜臀av| 玖玖爱视频在线| 国产免费拔擦拔擦8x高清在线人| 国产欧美日韩精品一区| 91九色蝌蚪嫩草| 无码无套少妇毛多18pxxxx| 91久久电影| 亚洲欧美日韩爽爽影院| 潘金莲一级淫片aaaaa| 午夜无码国产理论在线| 一区二区三区不卡视频| 亚洲看片网站| 能在线看的av| 岛国一区二区三区| 国产综合久久久久| 天堂网一区二区| 亚洲国产日本| 久久91亚洲人成电影网站| 色综合99久久久无码国产精品| 风间由美中文字幕在线看视频国产欧美 | 欧美视频专区一二在线观看| 吴梦梦av在线| eeuss影院www在线播放| 久久这里都是精品| 国产一区二区自拍| 国内毛片毛片毛片毛片| 久久精品72免费观看| 青草青草久热精品视频在线观看| 精品无码一区二区三区电影桃花 | 欧美 亚洲 另类 激情 另类| 亚洲久久成人| 久久久久久久久久久人体| 国产又粗又硬又长又爽| 日韩免费高清| 最新中文字幕亚洲| 91在线无精精品白丝| 国产欧美高清视频在线| 亚洲欧洲午夜一线一品| 草草地址线路①屁屁影院成人| 国产乱论精品| 亚洲国产精品久久久久| 精品无码av一区二区三区| 老司机亚洲精品一区二区| 91精品国产丝袜白色高跟鞋| 奇米视频7777| 97久久精品一区二区三区的观看方式 | 中文字幕乱码免费| а√资源新版在线天堂| 亚洲欧美一区二区三区久本道91| 国产免费一区二区三区四在线播放| 一级毛片视频在线观看| 日韩一区在线看| 六月婷婷激情网| 男女羞羞视频在线观看| 亚洲成人你懂的| 日韩欧美亚洲天堂| 久久久久久久| 欧美日韩国产综合视频在线观看| jizzzz日本| 精品一区二区三区中文字幕 | 在线免费观看成年人视频| 丝袜av一区| 国产一区二区三区四区福利| 久久久久99精品成人| 中文av一区| 午夜免费日韩视频| 中文精品久久久久人妻不卡| 美女网站一区二区| 99porn视频在线| 亚洲欧美综合一区二区| 欧美国产激情一区二区三区蜜月| 天堂v在线视频| 国产丝袜在线播放| 日本韩国欧美一区| 激情成人在线观看| 欧美黑白配在线| 伊人久久久久久久久久久| 精品国产精品国产精品| 91久久亚洲| 国产精品视频区| 精品久久久中文字幕人妻| 99免费精品在线| 亚洲在线观看一区| 91老司机福利在线| 精品视频在线视频| 污污免费在线观看| 不卡av一区二区| 久久久久久中文| 国产乱码在线观看| 风流少妇一区二区| 亚洲不卡一卡2卡三卡4卡5卡精品| jizz在线免费观看| 亚洲成人av一区二区三区| 91日韩视频在线观看| aaa国产精品| 国产一区二区激情| 日本三级免费看| 久久99精品久久久久| 久久草.com| а√天堂8资源在线官网| 日韩欧美亚洲范冰冰与中字| 中文字幕在线观看视频www| 国内成人精品| 久久乐国产精品| 国产精品高潮呻吟av| 久久人人97超碰com| 日本人妻伦在线中文字幕| 成人黄页网站视频| 亚洲美女在线看| 久久精品亚洲无码| 国产一区二区在线视频| 亚洲精品第一区二区三区| 中文字幕成在线观看| 日韩久久久精品| 999精品在线视频| 日韩不卡在线观看日韩不卡视频| 狠狠干一区二区| h片在线播放| 欧美日韩一区 二区 三区 久久精品| 免费a v网站| 亚洲网站视频| 操一操视频一区| 性开放的欧美大片| 欧美视频在线一区二区三区| 永久免费看mv网站入口78| 一区二区三区在线电影| 成人免费福利在线| 91在线高清| 欧美午夜电影在线播放| 国产精久久一区二区三区| 国产精品日韩| 九九99玖玖| 国产乱码午夜在线视频| 日韩电影在线观看永久视频免费网站| 国产一国产二国产三| 成人永久免费视频| 黄色大片中文字幕| 久久中文字幕导航| 国语自产精品视频在线看抢先版图片| 超碰在线人人干| 亚洲国产综合色| 国产十八熟妇av成人一区| 亚洲国内欧美| 欧美成人dvd在线视频| 日本午夜大片a在线观看| 亚洲国产精品va| 久久国产视频播放| 久久精品日韩一区二区三区| 熟女人妇 成熟妇女系列视频| 奇米色欧美一区二区三区| 国产精品91久久| 毛片在线不卡| 欧美成人三级在线| 日韩三级视频在线播放| 91视频观看视频| 91制片厂毛片| 欧美影院一区| 久久精品日产第一区二区三区精品版| 免费观看一级欧美片| 中文字幕一区电影| 国产三级视频在线播放| 亚洲一区二区三区四区在线观看 | 欧美性xxxx极品hd欧美风情| 成人激情五月天| 韩国av一区二区三区| 狠狠精品干练久久久无码中文字幕| 国产成人免费视频网站视频社区 | 一区二区在线视频播放| 一区二区三区精| 亚洲永久精品大片| 亚洲午夜久久久久久久久红桃| 日本大胆欧美人术艺术动态 | 中文一区在线| 亚洲精品成人自拍| 岛国精品一区| 国产精品久久久久av免费| 欧美激情免费| 日韩风俗一区 二区| 中国一级片黄色一级片黄| 亚洲精品福利视频网站| 中文精品在线观看| 久久丁香综合五月国产三级网站 | 日日摸夜夜添夜夜添国产精品| 日韩欧美第二区在线观看| 欧美h版在线观看| 欧美中文字幕在线| 色呦呦在线资源| 国产亚洲精品91在线| www.国产精品视频| 91国在线观看| 久久成人在线观看| 中文字幕精品一区二区三区精品| 久久久久亚洲AV成人网人人小说| 久久久www| 欧美这里只有精品| 波多野结衣一区| 精品国产一区二区三区日日嗨| 日韩在线激情| 日本久久久久亚洲中字幕| 婷婷丁香在线| 日韩最新在线视频| 日韩a在线观看| 欧美成人一区二区三区片免费 | 国产日韩欧美高清| 欧美激情国内自拍| 午夜在线a亚洲v天堂网2018| 7777在线视频| 日本一区二区在线看| 久久精精品视频| 一区二区三区国产好| 成人激情av在线| 国模一区二区| 欧美一性一乱一交一视频| 里番在线播放| 欧美超级乱淫片喷水| 1pondo在线播放免费| 亚洲伦理中文字幕| 天天干天天插天天操| 精品欧美一区二区久久| 国产三区在线播放| 欧美日韩夫妻久久| 亚洲视频一区二区三区四区| 欧美午夜美女看片| 久久精品国产成人av| 亚洲不卡在线观看| 久久精品视频日本| 亚洲成人动漫一区| 国产一级视频在线| 亚洲午夜电影在线| 国产大片中文字幕在线观看| 一区二区理论电影在线观看| 中文字幕另类日韩欧美亚洲嫩草| 一色屋精品亚洲香蕉网站| 国精品人伦一区二区三区蜜桃| 中文一区在线播放| 国产第一页精品| 国产精品久线观看视频| 北条麻妃在线观看视频| 一区二区中文视频| 高h视频免费观看| 亚洲精品国产精华液| 国产十六处破外女视频| 亚洲精品中文字幕在线观看| 欧美精品一区二区成人| 亚洲午夜久久久久久久久电影院| 久久久91视频| 亚洲电影在线免费观看| 久久久午夜影院| 色综合一个色综合| 中文字幕在线观看高清| 欧美精品高清视频| 精品久久久中文字幕人妻| 欧美va亚洲va香蕉在线| 天天射,天天干| 国产午夜一区二区| 国产原创视频在线观看| 久久久久久成人精品| 在线观看福利电影| 国产精品爽爽爽| 国产精品亚洲一区二区在线观看| 国产chinese精品一区二区| 欧洲精品一区| 亚洲精品电影在线一区| 一区二区影视| 国产午夜大地久久| 免费观看成人av| www.com久久久| 成人一级片在线观看| 亚洲天堂视频一区| 亚洲色图丝袜美腿| 在线观看精品国产| 欧美日韩亚洲不卡| 亚洲精品成人电影| 一个色综合导航| 91极品在线| 日本高清视频精品| 日韩精品成人| 欧美一区1区三区3区公司| 午夜精品一区二区三区国产| 日韩五码在线观看| 免费的成人av| 中文字幕乱视频| 欧美国产在线观看| 国产一级免费观看| 欧美日韩国产大片| 性xxxfllreexxx少妇| 久久久av电影| 在线能看的av网址| 3d精品h动漫啪啪一区二区| 久久最新网址| 免费拍拍拍网站| 麻豆成人在线观看| 超碰97人人干| 亚洲一区二区偷拍精品| 中文字幕一二三四| 亚洲精品美女久久| av电影免费在线观看| 国产精品白嫩美女在线观看| 永久免费精品视频| 亚洲最大免费| 日本欧美一区二区三区乱码| 久久国产精品无码一级毛片| 亚洲视频图片小说| 中文字幕在线观看第二页| 精品小视频在线| 黄网站在线观| 亚洲综合在线中文字幕| 水蜜桃久久夜色精品一区| 92看片淫黄大片一级| 国产成人午夜精品影院观看视频| 久久久久人妻一区精品色| 欧美性xxxxxxx| 午夜小视频免费| 国产69精品久久久久9| 国产午夜精品一区在线观看| 亚洲黄色成人久久久| 久久深夜福利| 国产国语性生话播放| 午夜精品一区在线观看| 亚洲成人黄色片| 欧美日韩aaaa| 视频精品一区| 久久人妻无码一区二区| 精品一区二区三区免费视频| 日本在线观看网址| 欧洲中文字幕精品| 黄色的视频在线免费观看| 热草久综合在线| 亚洲素人在线| aaa毛片在线观看| 久久久久久久久久久黄色| 日韩三级av在线| 日韩毛片在线观看| 中文av在线全新| 日韩精品久久久| 蜜臀av一区二区在线免费观看| 懂色av粉嫩av浪潮av| 精品成人18| 国产精品xxxxx| gogogo高清在线观看一区二区| 青青草精品视频在线观看| 国产午夜久久久久| www.久久网| 精品国产欧美一区二区三区成人| 先锋影音网一区二区| 男女爱爱视频网站| 国产精品一区二区三区乱码| 免费一级a毛片夜夜看| 精品99一区二区| 亚洲精品国产精品国产| 日韩福利影院| 狠狠色狠狠色综合系列| 青娱乐av在线| 亚洲精品久久久久中文字幕二区 | 岛国av一区二区三区| 深夜福利在线看| 国产精品看片资源| 中文在线播放一区二区| 视频免费在线观看| 色狠狠色噜噜噜综合网| 拍真实国产伦偷精品| 91成人免费观看| 麻豆久久婷婷| av最新在线观看| 亚洲国产一区自拍| 91九色综合| 老司机激情视频| 久久综合久久综合久久综合| 又色又爽又黄无遮挡的免费视频| 久久在线观看视频| 免费成人蒂法| 中文字幕在线综合| 亚洲高清不卡在线| 888av在线| 国产一区二区三区四区五区加勒比 | 成人欧美一区二区三区1314| 高清一区二区三区四区| 国产成人福利网站| 韩国自拍一区| 亚洲欧美va天堂人熟伦| 欧美成人aa大片| 色猫猫成人app| 婷婷五月综合缴情在线视频| 中文一区在线播放| 婷婷色在线观看| 国产美女久久久| 在线视频精品| 成人观看免费视频| 国产亚洲精品久久久| 国产精品久av福利在线观看| 国内外成人免费激情视频|