中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

Node.js 應用跑得更快 10 個技巧
來源:易賢網 閱讀:1006 次 日期:2016-07-08 15:46:29
溫馨提示:易賢網小編為您整理了“Node.js 應用跑得更快 10 個技巧”,方便廣大網友查閱!

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

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

1.并行

創建 Web 應用的時候,你可能要多次調用內部 API 來獲取各種數據。比如說,假設在 Dashboard 頁面上,你要執行下面這幾個調用:

用戶信息 -getUserProfile().

當前活動 -getRecentActivity().

訂閱內容 -getSubscriptions().

通知內容 -getNotifications().

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

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

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

function runInParallel() {

async.parallel([

getUserProfile,

getRecentActivity,

getSubscriptions,

getNotifications

], function(err, results) {

//This callback runs when all the functions complete

});

}

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

2.異步

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

// Asynchronous

fs.readFile('file.txt', function(err, buffer) {

var content = buffer.toString();

});

// Synchronous

var content = fs.readFileSync('file.txt').toString();

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

3.緩存

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

var router = express.Router();

router.route('/latestPosts').get(function(req, res) {

Post.getLatest(function(err, posts) {

if (err) {

throw err;

}

res.render('posts', { posts: posts });

});

});

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

var redis = require('redis'),

client = redis.createClient(null, null, { detect_buffers: true }),

router = express.Router();

router.route('/latestPosts').get(function(req,res){

client.get('posts', function (err, posts) {

if (posts) {

return res.render('posts', { posts: JSON.parse(posts) });

}

Post.getLatest(function(err, posts) {

if (err) {

throw err;

}

client.set('posts', JSON.stringify(posts)); 

res.render('posts', { posts: posts });

});

});

});

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

4.gzip壓縮

開啟 gzip 壓縮對你的 Web 應用會產生巨大影響。當一個 gzip 壓縮瀏覽器請求某些資源的時候,服務器會在響應返回給瀏覽器之前進行壓縮。如果你不用 gzip 壓縮你的靜態資源,瀏覽器拿到它們可能會花費更長時間。

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

var compression = require('compression');

app.use(compression()); //use compression 

app.use(express.static(path.join(__dirname, 'public')));

5.盡量在客戶端渲染

現在有超多功能強勁的客戶端 MVC/MVVM 框架,比如說 AngularJS, Ember, Meteor, 等等,構建一個單頁面應用變得非常簡單。基本上,你只要公開一個 API,返回 JSON 響應給客戶端就可以了,而不需要在服務端渲染頁面。

在客戶端,你可以用框架來組織 JSON 然后把它們顯示在 UI 上。服務端只發送 JSON 響應可以節省帶寬,改善性能,因為你不需要在每個響應里面都返回布局標記了,對吧,你只需要返回純 JSON,然后在客戶端渲染它們。

6.不要在Session存儲太多數據

典型的 Express 頁面應用, Session 數據默認是保存在內存中的。當你把太多數據保存在 Session 的時候,會導致服務器開銷顯著增大。所以,要么你切換到別的儲存方式來保存 Session 數據,要么盡量減少存儲在 Session 中的數據量。

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

7.優化查詢

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

Post.find().limit(10).exec(function(err, posts) {

//send posts to client

});

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

Post.find().limit(10).exclude('comments').exec(function(err, posts) {

//send posts to client

});

8.用標準的V8方法

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

9.在 Node 前面用 Nginx

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

10.打包JavaScript

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

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

更多信息請查看網絡編程
易賢網手機網站地址:Node.js 應用跑得更快 10 個技巧
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲视频免费在线| 亚洲成人中文| 免费在线观看日韩欧美| 免费精品99久久国产综合精品| 免费成人高清在线视频| 欧美三级欧美一级| 国外成人在线视频| 亚洲一区欧美激情| 久久精品国产99国产精品澳门| 欧美成人精品高清在线播放| 国产精品久久久久久久久久久久久久| 国模大胆一区二区三区| 中文日韩电影网站| 欧美.www| 国精品一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美日韩一二三四五区| 国产亚洲a∨片在线观看| 日韩香蕉视频| 另类专区欧美制服同性| 欧美香蕉视频| 亚洲欧洲一区二区天堂久久| 亚洲欧美伊人| 国产精品二区在线| 亚洲精品色图| 久久综合色天天久久综合图片| 国产精品日本一区二区| 一区二区黄色| 欧美日韩性生活视频| 亚洲日本一区二区| 欧美成人精品在线播放| 亚洲电影免费观看高清完整版在线| 欧美亚洲一区二区在线| 国产乱码精品一区二区三区五月婷 | 免费欧美日韩| 在线观看欧美日韩国产| 亚欧成人精品| 国产日韩亚洲欧美综合| 欧美一区二区三区久久精品茉莉花| 欧美日韩视频在线第一区| 亚洲日本在线视频观看| 欧美高清视频免费观看| 亚洲日韩成人| 欧美日韩美女在线观看| 一本色道久久综合亚洲精品高清| 欧美激情免费观看| 99精品免费视频| 欧美三级韩国三级日本三斤| 亚洲一区二区免费视频| 国产精品一区二区三区久久| 欧美在线综合| 亚洲欧洲午夜| 国产精品高清在线| 亚洲午夜在线观看| 欧美综合国产| 一区二区三区www| 久久阴道视频| 在线欧美日韩国产| 浪潮色综合久久天堂| 国产精品久久久久久久久久免费| 在线成人激情| 欧美精品亚洲二区| 国产精品乱码一区二三区小蝌蚪| 模特精品在线| 欧美激情精品久久久久久蜜臀 | 日韩午夜视频在线观看| 欧美日韩国产色站一区二区三区| 亚洲在线网站| 在线观看日韩专区| 国产精品毛片大码女人| 欧美成人免费一级人片100| 亚洲免费中文字幕| 亚洲国产精品v| 国产美女一区| 欧美人与禽猛交乱配视频| 久久精品99| 一区二区毛片| 最新亚洲一区| 尤物99国产成人精品视频| 国产精品久久久久9999吃药| 欧美www在线| 欧美自拍偷拍| 欧美亚洲一区二区三区| 99在线视频精品| 亚洲第一搞黄网站| 国产亚洲一区二区在线观看| 欧美日韩国产色综合一二三四| 久久久久网址| 欧美一区二区三区免费看 | 国内精品久久久久久影视8| 亚洲一级黄色| 国产精品初高中精品久久| 国产精品色网| 蜜臀久久99精品久久久久久9| 91久久久久久久久| 亚洲国产高清在线观看视频| 欧美日韩视频专区在线播放 | 国内精品模特av私拍在线观看| 在线观看国产成人av片| 欧美日韩亚洲高清一区二区| 免费成人黄色片| 久久久国产精品一区二区中文 | 欧美日韩精品在线| 免费观看欧美在线视频的网站| 性伦欧美刺激片在线观看| 黄色在线一区| 国产精品成人播放| 国产精品视频最多的网站| 国产欧美一区二区三区沐欲| 在线成人国产| 欧美激情区在线播放| 久久精品免费| 另类人畜视频在线| 欧美日韩亚洲国产一区| 最近看过的日韩成人| 久久婷婷国产麻豆91天堂| 亚洲一区图片| 一区二区欧美视频| 亚洲国产日韩一级| 美女网站在线免费欧美精品| 欧美午夜精品久久久| 欧美在线啊v| 亚洲欧美在线磁力| 亚洲综合精品四区| 亚洲欧美国产日韩中文字幕| 亚洲一区二区三区激情| 国内精品视频久久| 伊人久久大香线| 亚洲人成在线观看| 亚洲欧洲在线视频| 亚洲一区二区视频在线| 午夜综合激情| 欧美jizzhd精品欧美巨大免费| 久久国产精品久久久久久电车| 欧美激情一区二区三区在线视频 | av成人激情| 欧美激情一区二区三级高清视频| 久久久久综合一区二区三区| 国产精品日韩欧美| 原创国产精品91| 亚洲深夜福利| 玖玖精品视频| 国产精品女主播| 最新成人av网站| 久久国产福利| 国产精品久久久久久久久婷婷| 国内外成人在线| 亚洲欧美大片| 欧美日韩美女一区二区| 国内精品久久久久久久97牛牛| 亚洲色无码播放| 久久亚洲综合色| 国产精品在线看| 日韩一区二区高清| 久久人人97超碰国产公开结果 | 亚洲自啪免费| 欧美激情久久久久久| 精品成人乱色一区二区| 午夜精品福利在线| 国产精品护士白丝一区av| 亚洲精品国产精品国自产观看| 久久精品国产在热久久| 国产精品一区二区三区四区| 亚洲国产精品久久精品怡红院| 欧美一区在线视频| 国产欧美日韩高清| 午夜亚洲视频| 国产日韩亚洲欧美综合| 午夜精品一区二区三区电影天堂 | 亚洲男人影院| 欧美视频福利| 亚洲尤物视频网| 国产精品永久免费视频| 欧美在线观看视频一区二区三区| 国产精品久久久久毛片软件| 亚洲午夜精品| 国产欧美日韩免费| 久久久久久国产精品mv| 国模精品一区二区三区| 久久超碰97中文字幕| 激情久久久久久久| 久久久久一区二区三区| 亚洲第一精品电影| 欧美美女bbbb| 亚洲欧美国产va在线影院| 国产视频在线观看一区| 玖玖国产精品视频| 亚洲精品一区二区三区樱花| 欧美日韩精品在线视频| 亚洲伊人久久综合| 狠狠色丁香久久婷婷综合_中| 久久综合狠狠综合久久综合88| 亚洲韩国精品一区| 欧美午夜片欧美片在线观看| 亚洲欧美视频| 亚洲国产精品va在看黑人| 欧美网站大全在线观看| 久久精品一本久久99精品| 亚洲黑丝在线| 国产精品成人v|