NodeJS Programming Tutorial

10 Trik yang Harus di Ketahui Ketika Ngoding NodeJS

TUKANG KETIK
Agustus 28, 2024
0 Komentar
Beranda
NodeJS
Programming
Tutorial
10 Trik yang Harus di Ketahui Ketika Ngoding NodeJS

img source: freecodecamp.org

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:

  1. Install modul: npm install dotenv
  2. Buat file .env:
    PORT=3000
    DATABASE_URL=mongodb://localhost/mydb
  3. 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:

  1. Install modul: npm install express-rate-limit
  2. 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.

Referensi

Penulis blog

TUKANG KETIK
TUKANG KETIK
Programming is 10% writing code, and 90% understanding why it's not working. Coding is trial & error.

Tidak ada komentar

Tolong Ketikannya di jaga dan gunakan bahasa yang sopan. Terima kasih
Atau Boleh request juga artikel apa yang ingin saya bahas ditulisan saya (tapi ini kalau saya bisa dan waktunya ada) maklum saya juga kerja.