Readable Stream
Kita sudah mengetahui bagaimana menggunakan fungsi fs.readFile() untuk mengakses berkas dalam materi sebelumnya. Fungsi ini beroperasi baik secara asynchronous maupun secara synchronous dan membaca berkas hingga selesai sebelum mengembalikan data. Itu berarti akan membutuhkan banyak memori dan waktu untuk mendapatkan hasilnya jika kita menggunakannya untuk mengakses berkas yang sangat besar. Ini sangat tidak efisien.
Solusinya adalah dengan menggunakan teknik stream. Teknik stream membaca berkas bagian demi bagian daripada sekaligus. YouTube menggunakan metode ini untuk menampilkan video secara instan kepada pengguna.
source image: https://levelup.gitconnected.com
Teknik stream merupakan salah satu konsep fundamental yang mendukung aplikasi Node.js bekerja. Teknik ini dapat menangani kasus baca tulis berkas, komunikasi jaringan, atau beban kerja apapun agar dapat berjalan dengan lebih efisien. Untuk saat ini, kami tidak dapat mempelajari kasus yang disebutkan sebelumnya karena terlalu kompleks. Kita menggunakan kasus paling sederhana, membaca teks pada berkas bagian-per-bagian, untuk memahami bagaimana stream bekerja.
Kita dapat membuat readable stream dengan menggunakan method createReadStream() dari core module fs.
const fs = require('fs');
const readableStream = fs.createReadStream('./article.txt', {
highWaterMark: 10
});
readableStream.on('readable', () => {
try {
process.stdout.write(`[${readableStream.read()}]`);
} catch(error) {
// catch the error when the chunk cannot be read.
}
});
readableStream.on('end', () => {
console.log('Done');
});
Fungsi createReadStream() menerima dua argumen. Lokasi berkas yang ingin dibaca adalah argumen pertama dan objek konfigurasi adalah argumen kedua. Kita dapat menggunakan properti highWaterMark di dalam objek konfigurasi untuk menetapkan ukuran buffer. Nilai default properti ini adalah 16384 bytes atau 16 kb. Jika kita ingin tetap dengan nilai default, properti ini tidak perlu diatur. Namun, kita membuat ukuran buffer menjadi sepuluh bytes karena hanya menggunakan berkas teks yang sangat kecil. Ini menunjukkan bahwa berkas akan dibaca setiap sepuluh karakter (1 karakter = 1 byte).
"Buffer di dalam stream adalah memori sementara yang digunakan oleh stream dalam menyimpan data hingga data tersebut dikonsumsi." |
createReadStream() mengembalikan EventEmitter, di mana kita dapat menetapkan fungsi listener setiap kali event readable dibangkitkan. Event readable akan dibangkitkan ketika buffer sudah memiliki ukuran sesuai dengan nilai yang ditetapkan pada properti highWaterMark, dalam arti buffer sudah siap dibaca. Kemudian event end akan dibangkitkan setelah proses stream selesai.
Bila kode di atas dijalankan maka akan menghasilkan output seperti ini:
- article.txt
- result
Stream di Node.js
Teknik stream merupakan salah satu konsep fundamental yang mendukung aplikasi Node.js bekerja. Teknik ini dapat menangani kasus baca tulis berkas, komunikasi jaringan, atau beban kerja apapun agar dapat berjalan dengan lebih efisien.
[Stream di ][Node.js
][Teknik str][eam merupa][kan salah ][satu konse][p fundamen][tal yang m][endukung a][plikasi No][deJS beker][ja. Teknik][ ini dapat][ menangani][ kasus bac][a tulis be][rkas, komu][nikasi jar][ingan, ata][u beban ke][rja apapun][ agar dapa][t berjalan][ dengan le][bih efisie][n.][null]Done
0 Komentar
Berkomentar dengan bijak