首頁 >web前端 >js教程 >掌握 Node.js 流和管道

掌握 Node.js 流和管道

DDD
DDD原創
2024-09-19 06:15:331084瀏覽

Mastering Node.js Streams and Pipelines

Streams 是 Node.js 高效處理大型資料集的超能力。讓我們深入研究流和管道。

為什麼選擇流?

  1. 記憶體效率
  2. 時間效率
  3. 可組合性

流的類型

  1. 可讀
  2. 可寫
  3. 複式
  4. 變形

基本串流使用

const fs = require('fs');

const readStream = fs.createReadStream('big.file');
const writeStream = fs.createWriteStream('output.file');

readStream.on('data', (chunk) => {
  writeStream.write(chunk);
});

readStream.on('end', () => {
  writeStream.end();
});

輸入管道

管道簡化了流組合和錯誤處理。

const { pipeline } = require('stream/promises');
const fs = require('fs');
const zlib = require('zlib');

async function compressFile(input, output) {
  await pipeline(
    fs.createReadStream(input),
    zlib.createGzip(),
    fs.createWriteStream(output)
  );
  console.log('Compression complete');
}

compressFile('big.file', 'big.file.gz').catch(console.error);

自訂轉換流

const { Transform } = require('stream');

const upperCaseTransform = new Transform({
  transform(chunk, encoding, callback) {
    this.push(chunk.toString().toUpperCase());
    callback();
  }
});

pipeline(
  process.stdin,
  upperCaseTransform,
  process.stdout
).catch(console.error);

性能技巧

  1. 使用highWaterMark來控制緩衝
  2. 為非同步迭代實作stream.Readable.from()
  3. 利用stream.finished()進行清潔

常見陷阱

  1. 忽略背壓
  2. 處理不當錯誤
  3. 忽略結束可寫流

串流在大型資料集或即時資料處理方面表現出色。掌握它們以實現可擴展的 Node.js 應用程式。

乾杯?

以上是掌握 Node.js 流和管道的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn