Node.js telah mendapat manfaat dari fitur yang digerakkan oleh acara dan asinkron, dan telah segera. Namun, tidak mungkin untuk cepat dalam jaringan modern. Jika Anda berencana menggunakan Node.js untuk mengembangkan aplikasi web Anda berikutnya, maka Anda harus melakukan segalanya untuk membuat aplikasi Anda lebih cepat dan sangat cepat. Artikel ini akan memperkenalkan 10 item, dan setelah pengujian, ini dapat sangat meningkatkan keterampilan aplikasi node. Tanpa basa -basi lagi, mari kita lihat satu per satu.
1. Paralel
Saat membuat aplikasi web, Anda mungkin harus menghubungi API internal beberapa kali untuk mendapatkan berbagai data. Misalnya, misalkan di halaman dasbor, Anda harus menjalankan panggilan berikut:
Informasi Pengguna - getUserProfile ().
Aktivitas saat ini - getRecentActivity ().
Berlangganan Konten - GetSubscriptions ().
Konten Pemberitahuan - GetNotification ().
Untuk mendapatkan informasi ini, Anda harus membuat middleware terpisah untuk setiap metode dan kemudian menautkannya ke rute dasbor. Tetapi masalahnya adalah bahwa pelaksanaan metode ini linier, dan yang berikutnya tidak akan dimulai sampai yang sebelumnya selesai. Solusi yang layak adalah memanggil mereka secara paralel.
Seperti yang Anda ketahui, Node.js sangat pandai memanggil beberapa metode secara paralel karena asinkron. Kami tidak dapat menyia -nyiakan sumber daya alam. Metode yang saya sebutkan di atas tidak memiliki ketergantungan, sehingga kami dapat menjalankannya secara paralel. Dengan cara ini, kita dapat mengurangi jumlah middleware dan sangat meningkatkan kecepatan.
Kita dapat menggunakan async.js untuk menangani paralelisme, yang merupakan modul simpul yang khusus digunakan untuk melatih JavaScript secara tidak sinkron. Kode berikut menunjukkan cara menggunakan async.js untuk memanggil beberapa metode secara paralel:
Salinan kode adalah sebagai berikut:
fungsi runinparallel () {
async.parallel ([
getUserProfile,
getRecentActivity,
getSubscriptions,
Get Notification
], fungsi (err, hasil) {
// panggilan balik ini berjalan saat semua fungsi selesai
});
}
Jika Anda ingin memiliki tampilan yang lebih mendalam di Async.js, silakan pindah di halaman GitHub-nya.
2. Asynchronous
Dengan desain node.js adalah satu berulir. Berdasarkan ini, kode sinkron akan memblokir seluruh aplikasi. Misalnya, sebagian besar API sistem file memiliki versi yang disinkronkan. Kode berikut menunjukkan dua operasi: Membaca file sinkron dan asinkron:
Salinan kode adalah sebagai berikut:
// asinkron
fs.readfile ('file.txt', function (err, buffer) {
var content = buffer.toString ();
});
// sinkron
var content = fs.readfileSync ('file.txt'). ToString ();
Namun, jika Anda melakukan operasi pemblokiran jangka panjang seperti itu, utas utama akan diblokir sampai operasi ini selesai. Ini sangat mengurangi kinerja aplikasi Anda. Oleh karena itu, yang terbaik adalah memastikan bahwa kode Anda menggunakan versi API asinkron, setidaknya Anda harus tidak sinkron di simpul kinerja. Selain itu, Anda harus sangat berhati-hati saat memilih modul pihak ketiga. Karena ketika Anda mencoba menghapus operasi sinkronisasi dari kode Anda, panggilan sinkron dari perpustakaan eksternal akan menyia -nyiakan semua upaya Anda dan mengurangi kinerja aplikasi Anda.
3. Cache
Jika Anda menggunakan beberapa data yang tidak sering berubah, Anda harus menyimpannya untuk meningkatkan kinerja. Misalnya, kode berikut adalah contoh dari mendapatkan posting terbaru dan menampilkannya:
Salinan kode adalah sebagai berikut:
var router = express.router ();
router.route ('/LETR LOVERPOSTS'). Get (function (req, res) {
Post.getLatest (function (err, post) {
if (err) {
Lempar err;
}
res.render ('Post', {Post: Post});
});
});
Jika Anda tidak sering memposting, Anda dapat menyimpan daftar pos dan membersihkannya setelah beberapa saat. Misalnya, kita dapat menggunakan modul Redis untuk mencapai tujuan ini. Tentu saja, Anda harus menginstal Redis di server Anda. Kemudian Anda dapat menyimpan pasangan kunci/nilai dengan klien yang disebut node_redis. Contoh berikut menunjukkan bagaimana kita menembus posting:
Salinan kode adalah sebagai berikut:
var redis = membutuhkan ('redis'),
klien = redis.createClient (null, null, {detect_buffers: true}),
router = express.router ();
router.route ('/LETR LOVERPOSTS'). Get (function (req, res) {
client.get ('post', function (err, post) {
if (posting) {
return res.render ('post', {Post: json.parse (post)});
}
Post.getLatest (function (err, post) {
if (err) {
Lempar err;
}
client.set ('Post', json.stringify (post));
res.render ('Post', {Post: Post});
});
});
});
Lihat, mari kita periksa cache Redis terlebih dahulu untuk melihat apakah ada posting. Jika demikian, kami mengambil daftar posting ini dari cache. Kalau tidak, kami akan mengambil konten database dan menyimpan hasilnya. Selain itu, setelah periode waktu tertentu, kami dapat membersihkan cache Redis sehingga konten dapat diperbarui.
4. Kompresi Gzip
Menyalakan kompresi GZIP akan berdampak besar pada aplikasi web Anda. Ketika browser terkompresi GZIP meminta sumber daya tertentu, server mengompres sebelum respons dikembalikan ke browser. Jika Anda tidak menggunakan GZIP untuk mengompres sumber daya statis Anda, mungkin butuh waktu lebih lama bagi browser untuk mendapatkannya.
Dalam aplikasi Express, kami dapat menggunakan middleware Express.Static () built-in untuk menangani konten statis. Selain itu, konten statis dapat dikompresi dan diproses menggunakan middleware kompresi. Berikut adalah contoh penggunaannya:
Salinan kode adalah sebagai berikut:
var kompresi = membutuhkan ('kompresi');
app.use (compression ()); // Gunakan kompresi
app.use (express.static (path.join (__ dirname, 'public')));
5. Jika memungkinkan, render dengan klien
Sekarang ada kerangka kerja MVC/MVVM klien yang sangat fleksibel dan kuat, seperti AngularJS, Ember, Meteor, dll., Dan sangat mudah untuk membangun aplikasi satu halaman. Pada dasarnya, Anda hanya perlu mengekspos API dan mengembalikan respons JSON kepada klien, tanpa membuat halaman di server. Pada klien, Anda dapat mengatur JSON dengan kerangka kerja dan menampilkannya di UI. Hanya mengirim respons JSON di server yang dapat menyimpan bandwidth dan meningkatkan kinerja, karena Anda tidak perlu mengembalikan tanda tata letak di setiap respons, benar, Anda hanya perlu mengembalikan JSON murni dan kemudian menjadikannya pada klien.
Mari kita lihat tutorial saya, yaitu tentang cara mengekspos API yang tenang menggunakan Express 4. Saya juga menulis tutorial lain yang menunjukkan cara menggabungkan API ini dengan AngularJS.
6. Jangan menyimpan terlalu banyak data dalam sesi
Untuk aplikasi halaman Express yang khas, data sesi disimpan dalam memori secara default. Ketika Anda menyimpan terlalu banyak data di sesi, itu akan secara signifikan meningkatkan overhead server. Jadi, Anda beralih ke metode penyimpanan lain untuk menyimpan data sesi, atau mencoba meminimalkan jumlah data yang disimpan dalam sesi.
Misalnya, ketika pengguna masuk ke aplikasi Anda, Anda dapat menyimpan ID mereka hanya di sesi alih -alih seluruh objek data pengguna. Juga, untuk pertanyaan yang bisa Anda dapatkan dari ID, Anda ingin menggunakan MongoDB atau Redis untuk menyimpan data sesi.
7. Mengoptimalkan kueri
Misalkan Anda memiliki blog dan Anda ingin menampilkan posting terbaru di beranda Anda. Anda mungkin mendapatkan data melalui luwak seperti ini:
Salinan kode adalah sebagai berikut:
Post.find (). Limit (10) .exec (function (err, post) {
// Kirim posting ke klien
});
Namun, masalahnya adalah bahwa metode Find () Mongoose akan meminta semua bidang objek, dan banyak bidang tidak diperlukan di beranda. Misalnya, komentar menyimpan balasan ke posting tertentu. Kami tidak perlu menampilkan balasan artikel, sehingga kami dapat menghapusnya saat bertanya. Ini pasti akan meningkatkan kecepatan. Kueri di atas dapat dioptimalkan seperti ini:
Salinan kode adalah sebagai berikut:
Post.find (). Limit (10) .exclude ('komentar'). Exec (function (err, post) {
// Kirim posting ke klien
});
8. Gunakan metode V8 standar
Beberapa operasi pada koleksi, seperti peta, mengurangi, dan foreach, tidak selalu mendukung semua browser. Kami dapat menyelesaikan beberapa masalah kompatibilitas browser melalui perpustakaan latar depan. Tetapi untuk Node.js, Anda perlu tahu persis operasi apa yang didukung oleh mesin JavaScript Google. Dengan cara ini, Anda dapat secara langsung menggunakan metode bawaan ini untuk mengoperasikan koleksi di sisi server.
9. Gunakan nginx di depan node
Nginx adalah server web kecil dan ringan yang dapat mengurangi beban di server node.js Anda. Anda dapat mengonfigurasi sumber daya statis di nginx alih -alih di node. Anda dapat mengompres respons dengan GZIP pada Nginx untuk membuat semua respons lebih kecil. Jadi, jika Anda memiliki produk yang beroperasi, saya pikir Anda harus menggunakan Nginx untuk meningkatkan kecepatan berjalan.
10. Kemasan JavaScript
Akhirnya, Anda juga dapat sangat meningkatkan kecepatan aplikasi halaman dengan mengemas beberapa file JS. Ketika browser menemukan elemen <script> dalam rendering halaman, itu akan diblokir dan tidak akan terus berjalan sampai skrip diperoleh (kecuali properti asinkron ditetapkan). Misalnya, jika halaman Anda memiliki lima file JavaScript, browser akan mengeluarkan lima permintaan HTTP terpisah untuk mendapatkannya. Jika kelima file ini dikompresi dan dikemas menjadi satu, kinerja keseluruhan akan sangat ditingkatkan. Hal yang sama berlaku untuk file CSS. Anda dapat menggunakan alat kompilasi seperti Grunt/Gulp untuk mengemas file sumber daya Anda.
sebagai kesimpulan
10 tips di atas pasti dapat meningkatkan kecepatan aplikasi web Anda. Namun, saya tahu ada ruang untuk perbaikan dan optimasi. Jika Anda memiliki tips untuk meningkatkan kinerja, beri tahu saya dalam balasan.
Terima kasih sudah membaca!