Dalam artikel ini, kami akan menyelami jauh ke dalam Strim Node.js dan memahami cara ia membantu dalam memproses sejumlah besar data dengan cekap. Strim menyediakan cara yang elegan untuk mengendalikan set data yang besar, seperti membaca fail besar, memindahkan data melalui rangkaian atau memproses maklumat masa nyata. Tidak seperti operasi I/O tradisional yang membaca atau menulis keseluruhan data sekali gus, menstrim memecahkan data kepada bahagian yang boleh diurus dan memprosesnya sekeping demi sekeping, membolehkan penggunaan memori yang cekap.
Dalam artikel ini, kami akan membincangkan:
Satu strim dalam Node.js ialah aliran data yang berterusan. Strim amat berguna untuk mengendalikan tugas terikat I/O, seperti membaca fail, berkomunikasi melalui rangkaian atau berinteraksi dengan pangkalan data. Daripada menunggu keseluruhan operasi selesai, strim membolehkan data diproses dalam bahagian.
Node.js menyediakan empat jenis strim:
Mari teroka setiap jenis strim dengan contoh.
Strim boleh dibaca membolehkan anda membaca data sekeping demi sekeping, yang berguna untuk mengendalikan fail besar atau sumber data masa nyata.
const fs = require('fs'); // Create a readable stream from a large file const readableStream = fs.createReadStream('largeFile.txt', { encoding: 'utf8', highWaterMark: 16 * 1024 // 16 KB chunk size }); readableStream.on('data', (chunk) => { console.log('New chunk received:', chunk); }); readableStream.on('end', () => { console.log('Reading file completed'); });
Strim boleh tulis digunakan untuk menulis data secara berperingkat ke destinasi, seperti fail atau soket rangkaian.
const fs = require('fs'); // Create a writable stream to write data to a file const writableStream = fs.createWriteStream('output.txt'); writableStream.write('Hello, world!\n'); writableStream.write('Writing data chunk by chunk.\n'); // End the stream and close the file writableStream.end(() => { console.log('File writing completed'); });
strim dupleks boleh membaca dan menulis data. Satu contoh biasa ialah soket TCP, yang boleh menghantar dan menerima data secara serentak.
const net = require('net'); // Create a duplex stream (a simple echo server) const server = net.createServer((socket) => { socket.on('data', (data) => { console.log('Received:', data.toString()); // Echo the data back to the client socket.write(`Echo: ${data}`); }); socket.on('end', () => { console.log('Connection closed'); }); }); server.listen(8080, () => { console.log('Server listening on port 8080'); });
strim transformasi ialah jenis strim dupleks khas yang mengubah suai data semasa ia melaluinya. Kes penggunaan biasa ialah pemampatan fail.
const fs = require('fs'); const zlib = require('zlib'); // Create a readable stream for a file and a writable stream for the output file const readable = fs.createReadStream('input.txt'); const writable = fs.createWriteStream('input.txt.gz'); // Create a transform stream that compresses the file const gzip = zlib.createGzip(); // Pipe the readable stream into the transform stream, then into the writable stream readable.pipe(gzip).pipe(writable); writable.on('finish', () => { console.log('File successfully compressed'); });
Apabila berurusan dengan fail besar (cth., log atau media), memuatkan keseluruhan fail ke dalam memori adalah tidak cekap dan boleh menyebabkan masalah prestasi. Strim membolehkan anda membaca atau menulis fail besar secara berperingkat, mengurangkan beban pada memori.
Contoh:
Aplikasi masa nyata seperti pelayan sembang atau papan pemuka langsung perlu memproses data apabila ia tiba. Strim menyediakan cara untuk mengendalikan data ini dengan cekap, mengurangkan kependaman.
Contoh:
Mampatan ialah satu lagi kes penggunaan biasa untuk strim. Daripada memuatkan keseluruhan fail ke dalam memori, anda boleh memampatkan data dengan cepat menggunakan strim transform.
Contoh:
Strim Node.js menawarkan cara yang fleksibel dan cekap untuk mengendalikan sejumlah besar data, sama ada anda membaca fail, memproses permintaan rangkaian atau melakukan operasi masa nyata. Dengan memecahkan data kepada bahagian yang boleh diurus, strim membolehkan anda bekerja dengan set data yang besar tanpa mengatasi memori sistem.
Dalam artikel seterusnya, kami akan meneroka NGINX dan peranannya dalam menyajikan kandungan statik, pengimbangan beban dan berfungsi sebagai proksi terbalik dalam aplikasi Node.js. Kami juga akan membincangkan cara menyepadukan SSL dan penyulitan untuk keselamatan yang dipertingkatkan.
Atas ialah kandungan terperinci Pengendalian Data yang Cekap dengan Node.js Streams. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!