Rumah >hujung hadapan web >tutorial js >Cara Meningkatkan Prestasi Node.js
Node.js ialah persekitaran masa jalan yang berkuasa yang telah merevolusikan pembangunan bahagian pelayan. Walaupun ia sememangnya berprestasi, untuk mencapai prestasi optimum selalunya memerlukan pengoptimuman yang teliti. Dalam artikel ini, kami akan meneroka kaedah untuk meningkatkan prestasi Node.js, bermula dengan pengelompokan dan meliputi strategi penting yang lain.
Penghimpunan dalam Node.js membolehkan anda menggunakan berbilang teras CPU untuk mengendalikan permintaan serentak, mengatasi sifat berbenang tunggal Node.js. Ini dicapai dengan melahirkan berbilang proses yang berkongsi port pelayan yang sama.
const http = require('http'); const PORT = 3000; http.createServer((req, res) => { res.writeHead(200); res.end('Hello, world!'); }).listen(PORT, () => { console.log(`Server running on port ${PORT}`); });
const cluster = require('cluster'); const http = require('http'); const numCPUs = require('os').cpus().length; if (cluster.isMaster) { console.log(`Master process ${process.pid} is running`); // Fork workers for (let i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', (worker, code, signal) => { console.log(`Worker ${worker.process.pid} died`); cluster.fork(); // Restart a worker if one dies }); } else { http.createServer((req, res) => { res.writeHead(200); res.end('Hello, world!'); }).listen(3000, () => { console.log(`Worker ${process.pid} started`); }); }
Node.js bergantung pada I/O tidak menyekat untuk mengendalikan berbilang permintaan dengan cekap. Menulis kod tak segerak memastikan gelung acara kekal dinyahsekat.
const fs = require('fs'); const data = fs.readFileSync('file.txt', 'utf8'); console.log(data);
const fs = require('fs'); fs.readFile('file.txt', 'utf8', (err, data) => { if (err) throw err; console.log(data); });
Pengimbangan beban mengedarkan permintaan masuk merentas berbilang pelayan atau proses, menghalang mana-mana pelayan tunggal daripada menjadi hambatan.
Konfigurasi Nginx yang mudah untuk pengimbangan beban:
const http = require('http'); const PORT = 3000; http.createServer((req, res) => { res.writeHead(200); res.end('Hello, world!'); }).listen(PORT, () => { console.log(`Server running on port ${PORT}`); });
Caching menyimpan data yang kerap diakses dalam ingatan, mengurangkan keperluan untuk pengiraan mahal atau pertanyaan pangkalan data.
const cluster = require('cluster'); const http = require('http'); const numCPUs = require('os').cpus().length; if (cluster.isMaster) { console.log(`Master process ${process.pid} is running`); // Fork workers for (let i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', (worker, code, signal) => { console.log(`Worker ${worker.process.pid} died`); cluster.fork(); // Restart a worker if one dies }); } else { http.createServer((req, res) => { res.writeHead(200); res.end('Hello, world!'); }).listen(3000, () => { console.log(`Worker ${process.pid} started`); }); }
Memantau gelung acara membantu mengesan kesesakan prestasi yang disebabkan oleh operasi menyekat.
const fs = require('fs'); const data = fs.readFileSync('file.txt', 'utf8'); console.log(data);
Memantau gelung acara membolehkan pengesanan proaktif dan penyelesaian kesesakan, mengekalkan prestasi lancar.
Strim memproses ketulan data yang besar secara berperingkat, mengurangkan penggunaan memori.
const fs = require('fs'); fs.readFile('file.txt', 'utf8', (err, data) => { if (err) throw err; console.log(data); });
http { upstream backend { server 127.0.0.1:3001; server 127.0.0.1:3002; } server { listen 80; location / { proxy_pass http://backend; } } }
Pertanyaan pangkalan data yang cekap mengurangkan masa tindak balas dan beban pelayan.
const redis = require('redis'); const client = redis.createClient(); client.get('key', (err, data) => { if (data) { console.log('Cache hit:', data); } else { console.log('Cache miss'); client.set('key', 'value'); } });
const { monitorEventLoopDelay } = require('perf_hooks'); const h = monitorEventLoopDelay(); h.enable(); setInterval(() => { console.log(`Event loop delay: ${h.mean} ms`); }, 1000);
Pertanyaan yang dioptimumkan hanya mendapatkan data yang diperlukan, mengurangkan masa pemprosesan dan meningkatkan prestasi.
Mengoptimumkan prestasi Node.js memerlukan gabungan strategi, daripada memanfaatkan pengelompokan kepada memantau gelung acara. Dengan melaksanakan teknik ini, anda boleh membina aplikasi yang berprestasi tinggi dan berskala.
Atas ialah kandungan terperinci Cara Meningkatkan Prestasi Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!