Node.js - Menyelaraskan Aplikasi
Hai, para pengembang Node.js masa depan! Hari ini, kita akan memulai perjalanan menarik ke dunia menyesuaikan aplikasi Node.js. Sebagai guru ilmu komputer yang ramah di lingkungan sekitar Anda, saya di sini untuk mengarahkan Anda melalui petualangan ini, langkah demi langkah. Jangan khawatir jika Anda baru dalam pemrograman - kita akan mulai dari dasar dan naik tingkat demi tingkat. Jadi, ambil minuman favorit Anda, betahlah, dan mari kita masuk ke dalam!
Metode exec()
Mari kita mulai dengan metode exec()
, yang mirip seperti pisau瑞士 Army untuk menjalankan perintah sistem di Node.js. Bayangkan Anda adalah seorang koki (itu Anda, pengembang) di dapur yang sibuk (aplikasi Node.js Anda). Kadang-kadang, Anda perlu mendapatkan alat dari ruang lain secara cepat. Itu apa yang exec()
lakukan - menjalankan perintah di proses terpisah dan membawa kembali hasilnya.
Ini adalah contoh sederhana:
const { exec } = require('child_process');
exec('ls -l', (error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error.message}`);
return;
}
if (stderr) {
console.error(`stderr: ${stderr}`);
return;
}
console.log(`stdout: ${stdout}`);
});
mari kitauraikan ini:
- Kita mengimpor fungsi
exec
dari modulchild_process
. - Kita memanggil
exec()
dengan dua argumen: perintah yang akan dijalankan ('ls -l'
) dan fungsi callback. - Fungsi callback menerima tiga parameter:
error
,stdout
, danstderr
. - Kita memeriksa kesalahan terlebih dahulu, kemudian output ke stderr, dan akhirnya mencetak stdout jika semua baik-baik saja.
Metode ini bagus untuk perintah yang cepat dan sederhana. Tetapi ingat, itu menampung seluruh output dalam memori, jadi itu bukan pilihan yang ideal untuk perintah dengan output besar.
Metode spawn()
Sekarang, mari kita pindah ke metode spawn()
. Jika exec()
adalah seperti mendapatkan alat dari ruang lain secara cepat, spawn()
adalah seperti mempekerjakan asisten koki yang bekerja bersama Anda, terus memberikan Anda bahan (data) saat mereka mempersiapkannya.
Ini adalah contoh:
const { spawn } = require('child_process');
const ls = spawn('ls', ['-l', '/usr']);
ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
ls.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
});
ls.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
mari kitauraikan ini:
- Kita mengimpor
spawn
darichild_process
. - Kita membuat proses baru menjalankan
ls -l /usr
. - Kita menyetel penggunaan event listener untuk
stdout
danstderr
untuk menghandle data saat datang. - Kita juga mendengarkan event
close
untuk mengetahui saat proses selesai.
spawn()
bagus untuk proses yang berjalan lama atau saat Anda berhadapan dengan jumlah data besar, karena itu menyala output.
Metode fork()
Berikutnya adalah metode fork()
. Bayangkan ini sebagai membuka cabang restoran (aplikasi) Anda di lokasi lain. Itu khusus untuk membuat proses Node.js baru.
Ini adalah contoh:
// main.js
const { fork } = require('child_process');
const child = fork('child.js');
child.on('message', (message) => {
console.log('Message from child:', message);
});
child.send({ hello: 'world' });
// child.js
process.on('message', (message) => {
console.log('Message from parent:', message);
process.send({ foo: 'bar' });
});
Dalam contoh ini:
- Dalam
main.js
, kita fork proses Node.js baru menjalankanchild.js
. - Kita menyetel penggunaan event listener untuk pesan dari proses anak.
- Kita mengirim pesan ke proses anak.
- Dalam
child.js
, kita mendengarkan pesan dari orang tua dan mengirim pesan kembali.
fork()
sangat cocok untuk tugas berat CPU yang Anda ingin pindahkan dari thread utama aplikasi Anda.
Metode execFile()
Terakhir tapi bukan kurang penting, kita memiliki metode execFile()
. Ini seperti exec()
, tetapi dioptimalkan untuk menjalankan file tanpa menciptakan shell.
Ini adalah contoh:
const { execFile } = require('child_process');
execFile('node', ['--version'], (error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error.message}`);
return;
}
if (stderr) {
console.error(`stderr: ${stderr}`);
return;
}
console.log(`Node.js version: ${stdout}`);
});
Dalam contoh ini:
- Kita mengimpor
execFile
darichild_process
. - Kita menjalankan perintah
node
dengan argumen--version
. - Kita menangani output sama seperti
exec()
.
execFile()
lebih efisien daripada exec()
saat Anda menjalankan file tertentu dan tidak memerlukan interpretasi shell.
Perbandingan Metode
Berikut adalah tabel yang membandingkan metode-metode ini:
Metode | Use Case | .Buffered | Shell | Best For |
---|---|---|---|---|
exec() | Perintah sederhana | Ya | Ya | Tugas cepat, output kecil |
spawn() | Proses berjalan lama | Tidak | Tidak | Mengalirkan jumlah data besar |
fork() | Proses Node.js baru | Tidak | Tidak | Tugas berat CPU di Node.js |
execFile() | Menjalankan file tertentu | Ya | Tidak | Menjalankan program tanpa shell |
Dan itu adalah! Kita telah menyoroti metode utama untuk menyesuaikan aplikasi Node.js Anda. Ingat, memilih metode yang tepat tergantung pada kebutuhan khusus Anda. Anda dealing dengan tugas kecil dan cepat? Pilih exec()
atau execFile()
. Memerlukan untuk menghandle banyak data atau proses berjalan lama? spawn()
adalah teman Anda. Dan untuk tugas berat CPU di Node.js, fork()
akan mendukung Anda.
Praktik dengan metode-metode ini, eksperimen, dan segera Anda akan mengatur simfoni proses dalam aplikasi Node.js Anda. Selamat coding, dan semoga server Anda selalu dapat diperbesar!
Credits: Image by storyset