5 Kesalahan Coding yang Menyebabkan Penurunan Performa
Berikut adalah penjelasan mendalam mengenai kesalahan umum dalam pemrograman beserta contoh kode sebelum dan sesudah perbaikan:
1. Nested Loop Berlebihan (Kompleksitas )
Melakukan perulangan di dalam perulangan membuat waktu eksekusi meningkat secara eksponensial seiring bertambahnya data.
- Contoh Buruk: Mencari kecocokan di dua array menggunakan loop bersarang.
const users = [...]; // 1000 data
const orders = [...]; // 1000 data
users.forEach(user => {
orders.forEach(order => {
if (order.userId === user.id) {
// Operasi berat
}
});
}); // Melakukan 1.000.000 iterasi!
- Solusi: Gunakan Map atau Hash Table untuk mengubah kompleksitas menjadi .
const orderMap = new Map(orders.map(o => [o.userId, o]));
users.forEach(user => {
const order = orderMap.get(user.id);
if (order) { /* Operasi */ }
}); // Hanya sekitar 2000 iterasi.
2. Mengambil Data Berlebihan dari Database
Mengambil semua kolom (SELECT *) saat hanya butuh satu atau dua data akan membebani bandwidth jaringan dan memori server.
- Contoh Buruk:
SELECT * FROM users WHERE status = 'active';
-- Mengambil foto profil, bio, dan alamat padahal hanya butuh nama.
- Solusi: Ambil hanya kolom yang diperlukan.
SELECT username, email FROM users WHERE status = 'active';
3. Mengulang Perhitungan yang Sama
Menghitung ulang nilai yang sama di dalam loop atau fungsi yang sering dipanggil akan membuang siklus CPU.
- Contoh Buruk:
for (let i = 0; i < arr.length; i++) {
const result = heavyCalculation(data); // Dihitung ulang setiap iterasi
console.log(arr[i] + result);
}
- Solusi: Simpan hasil dalam variabel (Caching/Memoization).
const cachedResult = heavyCalculation(data);
for (let i = 0; i < arr.length; i++) {
console.log(arr[i] + cachedResult);
}
4. Menggunakan Struktur Data yang Salah
Memilih struktur data yang tidak sesuai dengan kebutuhan operasi (seperti pencarian atau penghapusan) dapat memperlambat aplikasi.
- Contoh Buruk: Menggunakan Array untuk mengecek keberadaan item yang unik (Linear Search ).
const userIds = [1, 5, 10, ...];
if (userIds.includes(500)) { ... } // Harus mengecek satu per satu dari awal
-
Solusi: Gunakan
SetatauHashmapuntuk pencarian instan ().
const userIds = new Set([1, 5, 10, ...]);
if (userIds.has(500)) { ... } // Langsung ketemu tanpa looping
5. Logging Berlebihan di Lingkungan Produksi
console.log atau library logging yang sinkron bersifat menghambat (blocking). Jika ada ribuan log per detik, aplikasi akan melambat secara signifikan.
- Contoh Buruk:
function processData(data) {
data.forEach(item => {
console.log("Processing item: ", item.id); // Berbahaya jika data berjumlah jutaan
});
}
- Solusi: Hapus log debug atau gunakan level logging (Info, Warn, Error) yang bisa dimatikan di level konfigurasi.
if (process.env.NODE_ENV === 'development') {
console.log("Debug info");
}
Kesimpulan
Optimasi performa bukan tentang menulis kode yang rumit, melainkan tentang efisiensi. Dengan memilih struktur data yang tepat, membatasi akses data ke database, dan menghindari kalkulasi redundan, aplikasi kamu akan terasa jauh lebih ringan dan responsif bagi pengguna.
Top comments (0)