Node.js adalah platform yang sangat fleksibel dan kuat untuk pengembangan aplikasi server-side. Berikut adalah beberapa trik dan tips untuk membantu Anda bekerja lebih efisien dengan Node.js:
1.
Gunakan async/await
untuk Kode Asynchronous yang Lebih
Bersih
Alih-alih menggunakan callback atau .then()
dengan promise, Anda
dapat menggunakan async/await
untuk membuat kode asynchronous
Anda lebih bersih dan mudah dibaca.
Contoh:
// Menggunakan Promise
function fetchData() {
return new Promise((resolve) => {
setTimeout(() => resolve('Data fetched'), 1000);
});
}
fetchData().then((data) => {
console.log(data);
});
// Menggunakan async/await
async function fetchData() {
return new Promise((resolve) => {
setTimeout(() => resolve('Data fetched'), 1000);
});
}
async function displayData() {
const data = await fetchData();
console.log(data);
}
displayData();
2.
Gunakan process.nextTick()
untuk Menunda Eksekusi
Jika Anda perlu menunda eksekusi suatu fungsi hingga fase berikutnya dari
event loop, gunakan process.nextTick()
.
Contoh:
console.log('Start');
process.nextTick(() => {
console.log('This is executed after the current operation completes');
});
console.log('End');
3.
Pakai util.promisify()
untuk Mengonversi Fungsi Berbasis
Callback ke Promise
Jika Anda bekerja dengan API berbasis callback dan ingin mengonversinya ke
bentuk Promise, gunakan util.promisify()
dari modul
util
.
Contoh:
const util = require('util');
const fs = require('fs');
const readFile = util.promisify(fs.readFile);
async function readFileAsync() {
try {
const data = await readFile('file.txt', 'utf8');
console.log(data);
} catch (error) {
console.error(error);
}
}
readFileAsync();
4.
Gunakan child_process
untuk Menjalankan Proses
Eksternal
Node.js memungkinkan Anda menjalankan perintah shell atau aplikasi eksternal
menggunakan modul child_process
.
Contoh:
const { exec } = require('child_process');
exec('ls -la', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.error(`stderr: ${stderr}`);
});
5.
Gunakan cluster
untuk Memanfaatkan CPU Multi-Core
Node.js berjalan dalam satu thread, tetapi Anda dapat menggunakan modul
cluster
untuk memanfaatkan banyak core CPU dan meningkatkan
kinerja aplikasi.
Contoh:
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died`);
});
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello World\n');
}).listen(8000);
}
6.
Gunakan dotenv
untuk Mengelola Variabel Lingkungan
Untuk mengelola konfigurasi aplikasi yang bergantung pada variabel lingkungan,
gunakan modul dotenv
.
Contoh:
- Install modul:
npm install dotenv
-
Buat file
.env
:PORT=3000 DATABASE_URL=mongodb://localhost/mydb
-
Di kode Anda:
require('dotenv').config(); const port = process.env.PORT || 3000; console.log(`Server running on port ${port}`);
7.
Gunakan express-rate-limit
untuk Mencegah Serangan
DDoS
Jika Anda menggunakan Express.js, pertimbangkan menggunakan
express-rate-limit
untuk membatasi jumlah permintaan dari IP yang
sama untuk melindungi server Anda dari serangan DDoS.
Contoh:
- Install modul:
npm install express-rate-limit
-
Di kode Anda:
const rateLimit = require('express-rate-limit'); const express = require('express'); const app = express(); const limiter = rateLimit({ windowMs: 15 * 60 * 1000, // 15 menit max: 100 // Limit setiap IP ke 100 permintaan per window }); app.use(limiter); app.get('/', (req, res) => { res.send('Hello, world!'); }); app.listen(3000, () => { console.log('Server running on port 3000'); });
8.
Gunakan console.time()
dan
console.timeEnd()
untuk Profiling
Untuk memprofilkan dan mengukur waktu eksekusi bagian tertentu dari kode,
gunakan console.time()
dan console.timeEnd()
.
Contoh:
console.time('operation');
setTimeout(() => {
console.timeEnd('operation');
}, 1000);
9.
Gunakan async_hooks
untuk Memantau Asynchronous
Context
Modul async_hooks
memungkinkan Anda melacak dan memonitor konteks
asynchronous untuk debug dan profil.
Contoh:
const async_hooks = require('async_hooks');
const fs = require('fs');
const asyncHook = async_hooks.createHook({
init(asyncId, type, triggerAsyncId, resource) {
fs.writeSync(1, `Init: asyncId ${asyncId}, type ${type}\n`);
},
before(asyncId) {
fs.writeSync(1, `Before: asyncId ${asyncId}\n`);
},
after(asyncId) {
fs.writeSync(1, `After: asyncId ${asyncId}\n`);
},
destroy(asyncId) {
fs.writeSync(1, `Destroy: asyncId ${asyncId}\n`);
}
});
asyncHook.enable();
setTimeout(() => {
console.log('Timeout callback');
}, 1000);
10. Gunakan worker_threads
untuk Multithreading
Node.js mendukung multithreading dengan modul worker_threads
,
memungkinkan Anda untuk menjalankan thread secara bersamaan untuk pekerjaan
berat.
Contoh:
const { Worker, isMainThread, parentPort } = require('worker_threads');
if (isMainThread) {
const worker = new Worker(__filename);
worker.on('message', message => console.log(`Received from worker: ${message}`));
worker.postMessage('Hello Worker!');
} else {
parentPort.on('message', message => {
console.log(`Received from main: ${message}`);
parentPort.postMessage('Hello Main!');
});
}
Kesimpulan
Node.js menyediakan berbagai fitur dan modul untuk meningkatkan efisiensi pengembangan aplikasi. Dengan menggunakan trik-trik ini, Anda dapat menulis kode yang lebih bersih, meningkatkan performa aplikasi, dan memanfaatkan kekuatan penuh dari Node.js. Selalu periksa dokumentasi resmi dan eksperimen dengan fitur baru untuk terus mengoptimalkan aplikasi Anda.
Tidak ada komentar