国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

NPM酷庫:through 快速創建雙向流

DTeam / 2456人閱讀

摘要:流做下載等功能時候,我們經常會使用數據流模塊,因為,在大文件下載場景下,如果使用接口將文件全部讀入內存然后再返回給客戶端,很容易撐爆內存,比如一個文件,同時有人在下載,那么服務就需要占用內存。

NPM酷庫,每天兩分鐘,了解一個流行NPM庫。

做下載等功能時候,我們經常會使用數據流模塊(stream),因為,在大文件下載場景下,如果使用fs.readFile()接口將文件全部讀入內存然后再返回給客戶端,很容易撐爆內存,比如一個文件200M,同時有100人在下載,那么服務就需要占用10G 內存。

而使用stream,我們不會將文件全部讀入內存,而只是在內存中建立一個“水管”,所以內存中不會堆積過多數據:

ctx.body = fs.createReadStream("filename.ext");

上述代碼中,我們使用fs.createReadStream()方法創建了一個可讀流,Koa會直接讀取數據流,并返回給客戶端。

雙向流

如果一個流同時可讀、可寫,那么這就是一個雙向流。“水管”不適合解釋雙向流,我們用“電話線”來解釋,你說的話(寫數據)對方能聽見(讀數據),同時,對方說話(寫數據)你也能聽見(讀數據)。

妙用雙向流在很多時候能解決很復雜的問題,比如,數據庫導出場景。因為數據庫里數據巨大,所以不能一下子讀到Node.js內存中,我們可以創建一個只寫流,從數據庫逐條讀出數據然后調用只寫流,將數據寫入磁盤,所有數據全部導出到磁盤后,再參照上文創建一個只讀流,再將文件返回給客戶端。但是這樣存在問題的:

對磁盤大小有要求

在數據庫導出到磁盤的過程中,客戶端接受不到任何信息,很可能會造成瀏覽器超時訪問

白白消耗系統性能,浪費磁盤IO

接下來我們就用雙向流解決這個問題:

through

使用 through 可以快速創建一個雙向流,相比自己調用stream模塊創建雙向流,through更方便,因為through已經封裝了資源回收等機制。

const through = require("through");

// ...

const stream = through();
ctx.body = stream;

Order.find()
  .cursor()
  .eachAsync(async(order)=>{
    stream.write(order.toJSON());
  })
  .then(()=>{
    stream.end();
  });

上述代碼中,首先創建了一個雙向流,返回給Koa,然后以Mongoose模型舉例,查詢數據庫,并使用查詢游標(cursor)逐條向流中寫數據。在流的另一端,Koa就能逐條讀出數據并返回給客戶端。

參考資料

https://github.com/dominictar...

https://nodejs.org/api/stream...

歡迎關注公眾號:梁興臣

每天了解一個NPM庫,一年后成為Node.js高手

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92800.html

相關文章

  • NPM酷庫:split 按行讀取文本

    摘要:酷庫,每天兩分鐘,了解一個流行庫。昨天,我們了解的中數據流的處理,并使用快速創建雙向流,今天,我們繼續討論數據流。我們昨天說到,使用數據流,可以分批讀取數據到內存,而不用將文件一次性讀取到內存。 NPM酷庫,每天兩分鐘,了解一個流行NPM庫。 昨天,我們了解的Node.js中數據流的處理,并使用through快速創建雙向流,今天,我們繼續討論數據流。 我們昨天說到,使用數據流,可以分批...

    騫諱護 評論0 收藏0
  • NPM酷庫052:sax,按解析XML

    摘要:酷庫,每天兩分鐘,了解一個流行庫。在酷庫中,我們學習了如何使用庫將格式文檔字符串解析為的對象數據,本期,我們繼續學習,一個可以以流編程的方式解析。 NPM酷庫,每天兩分鐘,了解一個流行NPM庫。· 在NPM酷庫051中,我們學習了如何使用xml2js庫將XML格式文檔字符串解析為JavaScript的對象數據,本期,我們繼續學習sax,一個可以以流編程的方式解析XML。 使用流編程的方...

    pinecone 評論0 收藏0
  • NPM酷庫052:sax,按解析XML

    摘要:酷庫,每天兩分鐘,了解一個流行庫。在酷庫中,我們學習了如何使用庫將格式文檔字符串解析為的對象數據,本期,我們繼續學習,一個可以以流編程的方式解析。 NPM酷庫,每天兩分鐘,了解一個流行NPM庫。· 在NPM酷庫051中,我們學習了如何使用xml2js庫將XML格式文檔字符串解析為JavaScript的對象數據,本期,我們繼續學習sax,一個可以以流編程的方式解析XML。 使用流編程的方...

    zhangke3016 評論0 收藏0
  • NPM酷庫050:xmlbuilder,創建XML文件

    摘要:酷庫,每天兩分鐘,了解一個流行庫。在前幾期酷庫中,我們介紹了操作等數據格式文件,在外部系統接口中,我們還會經常遇到格式的接口協議。本期,我們先來了解,用來創建格式文檔。 NPM酷庫,每天兩分鐘,了解一個流行NPM庫。· 在前幾期NPM酷庫中,我們介紹了Node.js操作JSON5、YAML、CSON、CSV等數據格式文件,在外部系統接口中,我們還會經常遇到XML格式的接口協議。從本期開...

    baukh789 評論0 收藏0
  • NPM酷庫050:xmlbuilder,創建XML文件

    摘要:酷庫,每天兩分鐘,了解一個流行庫。在前幾期酷庫中,我們介紹了操作等數據格式文件,在外部系統接口中,我們還會經常遇到格式的接口協議。本期,我們先來了解,用來創建格式文檔。 NPM酷庫,每天兩分鐘,了解一個流行NPM庫。· 在前幾期NPM酷庫中,我們介紹了Node.js操作JSON5、YAML、CSON、CSV等數據格式文件,在外部系統接口中,我們還會經常遇到XML格式的接口協議。從本期開...

    taoszu 評論0 收藏0

發表評論

0條評論

DTeam

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<