最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

Node.js應(yīng)用跑得更快10個技巧_node.js

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 20:52:58
文檔

Node.js應(yīng)用跑得更快10個技巧_node.js

Node.js應(yīng)用跑得更快10個技巧_node.js:NodeJS是一個服務(wù)器端JavaScript解釋器,它將改變服務(wù)器應(yīng)該如何工作的概念。它的目標(biāo)是幫助程序員構(gòu)建高度可伸縮的應(yīng)用程序,編寫能夠處理數(shù)萬條同時連接到一個(只有一個)物理機(jī)的連接代碼。 Node.js 受益于它的事件驅(qū)動和異步的特征,已經(jīng)很快了。但是,
推薦度:
導(dǎo)讀Node.js應(yīng)用跑得更快10個技巧_node.js:NodeJS是一個服務(wù)器端JavaScript解釋器,它將改變服務(wù)器應(yīng)該如何工作的概念。它的目標(biāo)是幫助程序員構(gòu)建高度可伸縮的應(yīng)用程序,編寫能夠處理數(shù)萬條同時連接到一個(只有一個)物理機(jī)的連接代碼。 Node.js 受益于它的事件驅(qū)動和異步的特征,已經(jīng)很快了。但是,

NodeJS是一個服務(wù)器端JavaScript解釋器,它將改變服務(wù)器應(yīng)該如何工作的概念。它的目標(biāo)是幫助程序員構(gòu)建高度可伸縮的應(yīng)用程序,編寫能夠處理數(shù)萬條同時連接到一個(只有一個)物理機(jī)的連接代碼。

Node.js 受益于它的事件驅(qū)動和異步的特征,已經(jīng)很快了。但是,在現(xiàn)代網(wǎng)絡(luò)中只是快是不行的。如果你打算用 Node.js 開發(fā)你的下一個Web 應(yīng)用的話,那么你就應(yīng)該無所不用其極,讓你的應(yīng)用更快,異常的快。本文將介紹 10 條,經(jīng)過檢驗(yàn)得知可大大提高 Node 應(yīng)用的技巧。廢話不多說,讓我們逐條來看看。

1.并行

創(chuàng)建 Web 應(yīng)用的時候,你可能要多次調(diào)用內(nèi)部 API 來獲取各種數(shù)據(jù)。比如說,假設(shè)在 Dashboard 頁面上,你要執(zhí)行下面這幾個調(diào)用:

用戶信息 -getUserProfile().

當(dāng)前活動 -getRecentActivity().

訂閱內(nèi)容 -getSubscriptions().

通知內(nèi)容 -getNotifications().

為了拿到這些信息,你應(yīng)該會為每個方法創(chuàng)建獨(dú)立的中間件,然后將它們鏈接到 Dashboard 路由上。不過問題是,這些方法的執(zhí)行是線性的,上一個沒結(jié)束之前下一個不會開始。可行解決案是并行調(diào)用它們。

如你所知由于異步性,Node.js 非常擅長并行調(diào)用多個方法。我們不能暴殄天物。我上面提到的那些方法沒有依賴性,所以我們可以并行執(zhí)行它們。這樣我們可以削減中間件數(shù)量,大幅提高速度。

我們可以用 async.js 來處理并行,它是一個專門用來調(diào)教 JavaScript 異步的 Node 模塊。下面代碼演示怎樣用 async.js 并行調(diào)用多個方法的:

如果你想更深入了解 async.js ,請移步它的 GitHub 頁面。

2.異步

根據(jù)設(shè)計 Node.js 是單線程的。基于這點(diǎn),同步代碼會堵塞整個應(yīng)用。比如說,多數(shù)的文件系統(tǒng) API 都有它們的同步版本。下面代碼演示了文件讀取的同步和異步兩種操作:

不過要是你執(zhí)行那種長時間的阻塞操作,主線程就會被阻塞到這些操作完成為止。這大大降低你應(yīng)用的性能。所以,最好確保你的代碼里用的都是異步版本 API,最起碼你應(yīng)該在性能節(jié)點(diǎn)異步。而且,你在選用第三方模塊的時候也要很小心。因?yàn)楫?dāng)你想方設(shè)法把同步操作從你代碼中剔除之后,一個外部庫的同步調(diào)用會讓你前功盡棄,降低你的應(yīng)用性能

3.緩存

如果你用到一些不經(jīng)常變化的數(shù)據(jù),你應(yīng)該把它們緩存起來,改善性能。比如說,下面的代碼是獲取最新帖子并顯示的例子:

如果你不經(jīng)常發(fā)貼的話,你可以把帖子列表緩存起來,然后一段時間之后再把它們清理掉。比如,我們可以用 Redis 模塊來達(dá)到這個目的。當(dāng)然,你必須在你的服務(wù)器上裝 Redis。然后你可以用叫做 node_redis 的客戶端來保存鍵/值對。下面的例子演示我們怎么緩存帖子:

看到了吧,我們首先檢查 Redis 緩存,看看是否有帖子。如果有,我們從緩存中拿這些帖子列表。否則我們就檢索數(shù)據(jù)庫內(nèi)容,然后把結(jié)果緩存。此外,一定時間之后,我們可以清理 Redis 緩存,這樣就可以更新內(nèi)容了。

4.gzip壓縮

開啟 gzip 壓縮對你的 Web 應(yīng)用會產(chǎn)生巨大影響。當(dāng)一個 gzip 壓縮瀏覽器請求某些資源的時候,服務(wù)器會在響應(yīng)返回給瀏覽器之前進(jìn)行壓縮。如果你不用 gzip 壓縮你的靜態(tài)資源,瀏覽器拿到它們可能會花費(fèi)更長時間。

在 Express 應(yīng)用中,我們可以用內(nèi)建 express.static() 中間件來處理靜態(tài)內(nèi)容。此外,還可以用 compression 中間件壓縮和處理靜態(tài)內(nèi)容。下面是使用例:

5.盡量在客戶端渲染

現(xiàn)在有超多功能強(qiáng)勁的客戶端 MVC/MVVM 框架,比如說 AngularJS, Ember, Meteor, 等等,構(gòu)建一個單頁面應(yīng)用變得非常簡單?;旧希阒灰_一個 API,返回 JSON 響應(yīng)給客戶端就可以了,而不需要在服務(wù)端渲染頁面。

在客戶端,你可以用框架來組織 JSON 然后把它們顯示在 UI 上。服務(wù)端只發(fā)送 JSON 響應(yīng)可以節(jié)省帶寬,改善性能,因?yàn)槟悴恍枰诿總€響應(yīng)里面都返回布局標(biāo)記了,對吧,你只需要返回純 JSON,然后在客戶端渲染它們。

6.不要在Session存儲太多數(shù)據(jù)

典型的 Express 頁面應(yīng)用, Session 數(shù)據(jù)默認(rèn)是保存在內(nèi)存中的。當(dāng)你把太多數(shù)據(jù)保存在 Session 的時候,會導(dǎo)致服務(wù)器開銷顯著增大。所以,要么你切換到別的儲存方式來保存 Session 數(shù)據(jù),要么盡量減少存儲在 Session 中的數(shù)據(jù)量。

比如說,當(dāng)用戶登錄到你的應(yīng)用的時候,你可以只在 Session 中保存他們的 ID 而不是整個用戶數(shù)據(jù)對象。還有,對于那些你能夠從 id 拿到對象的查詢,你應(yīng)該會喜歡用 MongoDB 或者 Redis 來存儲 session 數(shù)據(jù)。

7.優(yōu)化查詢

假設(shè)你有個博客,你要在主頁上顯示最新帖子。你可能會通過 Mongoose 這樣取數(shù)據(jù):

不過問題是 Mongoose 的 find() 方法會把對象的所有字段都查詢出來,而許多字段在主頁上并不要求。比如說,commentsis 保存的是特定帖子的回復(fù)。我們不需要顯示文章回復(fù),所以我們可以在查詢的時候把它給剔除掉。這無疑會提高速度??梢韵襁@樣優(yōu)化上面那條查詢:

8.用標(biāo)準(zhǔn)的V8方法

集合上的一些操作,比如 map,reduce,和 forEach 不一定支持所有瀏覽器。我們可以通過前臺的庫解決部分瀏覽器兼容性問題。但對于 Node.js,你要確切知道 Google 的 V8 JavaScript 引擎支持哪些操作。這樣,你就可以在服務(wù)端直接用這些內(nèi)建方法來操作集合了。

9.在 Node 前面用 Nginx

Nginx 是個微小型輕量 Web 服務(wù)器,用它可以降低你的 Node.js 服務(wù)器的負(fù)載。你可以把靜態(tài)資源配置到 nginx 上,而不是在 Node 上。你可以在 nginx 上用 gzip 壓縮響應(yīng),讓所有的響應(yīng)都變得更小。所以,如果你有個正在營運(yùn)的產(chǎn)品,我覺得你應(yīng)該會想用 nginx 來改善運(yùn)行速度的。

10.打包JavaScript

最后,你還可以大大提高頁面應(yīng)用速度,通過把多個 JS 文件打包。當(dāng)瀏覽器在頁面渲染中碰到 元素的時候會被堵塞,直到拿到這個腳本才繼續(xù)運(yùn)行(除非設(shè)置了異步屬性)。比如,如果你的頁面有五個 JavaScript 文件,瀏覽器會發(fā)出五個獨(dú)立的 HTTP 請求來獲取他們。如果把這五個文件壓縮打包成一個,整體性能將可以大幅提升。CSS 文件也是一樣。你可以用諸如 Grunt/Gulp 這樣的編譯工具來打包你的資源文件。

通過以上十個方面給大家介紹了Node.js 應(yīng)用跑得更快的技巧,希望對大家有所幫助!

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Node.js應(yīng)用跑得更快10個技巧_node.js

Node.js應(yīng)用跑得更快10個技巧_node.js:NodeJS是一個服務(wù)器端JavaScript解釋器,它將改變服務(wù)器應(yīng)該如何工作的概念。它的目標(biāo)是幫助程序員構(gòu)建高度可伸縮的應(yīng)用程序,編寫能夠處理數(shù)萬條同時連接到一個(只有一個)物理機(jī)的連接代碼。 Node.js 受益于它的事件驅(qū)動和異步的特征,已經(jīng)很快了。但是,
推薦度:
標(biāo)簽: 10 技巧 應(yīng)用
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top