Rumah >hujung hadapan web >tutorial js >10 petua untuk mengoptimumkan kelajuan aplikasi web Node.js anda_node.js

10 petua untuk mengoptimumkan kelajuan aplikasi web Node.js anda_node.js

WBOY
WBOYasal
2016-05-16 16:37:421025semak imbas

Node.js sudah pun pantas kerana sifatnya yang dipacu peristiwa dan tak segerak. Walau bagaimanapun, hanya pantas tidak mencukupi dalam rangkaian moden. Jika anda akan menggunakan Node.js untuk membangunkan aplikasi web anda yang seterusnya, maka anda harus melakukan apa sahaja untuk menjadikan aplikasi anda lebih pantas, sangat pantas. Artikel ini akan memperkenalkan 10 petua yang diuji yang boleh meningkatkan aplikasi Node dengan sangat baik. Tanpa berlengah lagi, mari kita lihat satu persatu.

1. Selari

Apabila membuat aplikasi web, anda mungkin perlu memanggil API dalaman beberapa kali untuk mendapatkan pelbagai data. Sebagai contoh, katakan pada halaman Papan Pemuka, anda ingin melaksanakan panggilan berikut:

Maklumat pengguna -getUserProfile().

Aktiviti semasa -getRecentActivity().

Kandungan langganan -getSubscriptions().

Kandungan pemberitahuan -getNotifications().

Untuk mendapatkan maklumat ini, anda akan membuat perisian tengah yang berasingan untuk setiap kaedah dan kemudian memautkannya ke laluan Papan Pemuka. Tetapi masalahnya ialah pelaksanaan kaedah ini adalah linear, dan yang seterusnya tidak akan bermula sehingga yang sebelumnya berakhir. Penyelesaian yang mungkin adalah dengan memanggilnya secara selari.

Seperti yang anda tahu Node.js sangat pandai memanggil pelbagai kaedah secara selari kerana ketidaksegerakan. Kita tidak boleh membazirkan sumber kita. Kaedah yang saya nyatakan di atas tidak mempunyai kebergantungan supaya kita boleh melaksanakannya secara selari. Dengan cara ini kita boleh mengurangkan jumlah perisian tengah dan meningkatkan kelajuan dengan banyak.

Kami boleh menggunakan async.js untuk mengendalikan paralelisme, iaitu modul Nod yang digunakan khas untuk menala JavaScript secara tidak segerak. Kod berikut menunjukkan cara menggunakan async.js untuk memanggil berbilang kaedah secara selari:

Salin kod Kod adalah seperti berikut:

fungsi runInParallel() {
async.parallel([
GetUserProfile,
GetRecentActivity,
Dapatkan Langganan,
GetNotifications
], fungsi(err, hasil) {
//Panggil balik ini berjalan apabila semua fungsi selesai
});
}

Jika anda ingin mengetahui lebih lanjut tentang async.js, sila lawati halaman GitHubnya.

2. Tak segerak

Node.js adalah satu-benang mengikut reka bentuk. Berdasarkan ini, kod segerak boleh menyumbat keseluruhan aplikasi. Sebagai contoh, kebanyakan API sistem fail mempunyai versi segeraknya. Kod berikut menunjukkan kedua-dua operasi segerak dan tak segerak bagi membaca fail:

Salin kod Kod adalah seperti berikut:

// Tak segerak
fs.readFile('file.txt', function(err, buffer) {
kandungan var = buffer.toString();
});

// Segerak
kandungan var = fs.readFileSync('file.txt').toString();


Tetapi jika anda melakukan operasi menyekat jangka panjang, utas utama akan disekat sehingga operasi ini selesai. Ini sangat mengurangkan prestasi aplikasi anda. Oleh itu, sebaiknya pastikan anda menggunakan versi tak segerak API dalam kod anda Sekurang-kurangnya, anda harus tidak segerak dalam nod prestasi. Selain itu, anda harus berhati-hati apabila memilih modul pihak ketiga. Kerana apabila anda cuba untuk menghapuskan operasi penyegerakan daripada kod anda, panggilan segerak daripada pustaka luaran akan membuat asal semua usaha anda dan mengurangkan prestasi aplikasi anda.

3. Cache

Jika anda menggunakan beberapa data yang tidak kerap berubah, anda harus cache untuk meningkatkan prestasi. Contohnya, kod berikut ialah contoh mendapatkan siaran terkini dan memaparkannya:

Salin kod Kod adalah seperti berikut:

var penghala = express.Router();

router.route('/latestPosts').get(function(req, res) {
Post.getLatest(function(err, posts) {
Jika (err) {
           silap buang;
}

res.render('posts', { posts: posts });
});
});


Jika anda tidak kerap membuat siaran, anda boleh cache senarai siaran dan mengosongkannya selepas satu tempoh masa. Sebagai contoh, kita boleh menggunakan modul Redis untuk mencapai tujuan ini. Sudah tentu, anda mesti memasang Redis pada pelayan anda. Anda kemudian boleh menggunakan klien yang dipanggil node_redis untuk menyimpan pasangan kunci/nilai. Contoh berikut menunjukkan cara kami menyimpan siaran:
Salin kod Kod adalah seperti berikut:

var redis = memerlukan('redis'),
Pelanggan = redis.createClient(null, null, { detect_buffers: true }),
Penghala = express.Router();

router.route('/latestPosts').get(function(req,res){
client.get('posts', function (err, posts) {
Jika (siaran) {
Kembalikan res.render('posts', { posts: JSON.parse(posts) });
}

Post.getLatest(fungsi(err, posts) {
Jika (err) {
          silap buang;
}

client.set('posts', JSON.stringify(posts));
res.render('posts', { posts: posts });
});
});
});


Lihat, kami mula-mula menyemak cache Redis untuk melihat sama ada terdapat siaran. Jika ada, kami mendapat senarai siaran daripada cache. Jika tidak, kami mendapatkan semula kandungan pangkalan data dan cache hasilnya. Selain itu, selepas tempoh masa tertentu, kami boleh mengosongkan cache Redis supaya kandungan boleh dikemas kini.

4. pemampatan gzip

Mendayakan pemampatan gzip boleh memberi impak yang besar pada aplikasi web anda. Apabila penyemak imbas termampat gzip meminta beberapa sumber, pelayan memampatkan respons sebelum mengembalikannya kepada penyemak imbas. Jika anda tidak gzip sumber statik anda, penyemak imbas mungkin mengambil masa yang lebih lama untuk mendapatkannya.

Dalam aplikasi Express, kami boleh menggunakan perisian tengah express.static() terbina dalam untuk mengendalikan kandungan statik. Selain itu, kandungan statik boleh dimampatkan dan diproses menggunakan perisian tengah mampatan. Berikut ialah contoh penggunaan:

Salin kod Kod adalah seperti berikut:

var mampatan = memerlukan('mampatan');

app.use(compression()); //gunakan mampatan
app.use(express.static(path.join(__dirname, 'public')));

5 Jika boleh, gunakan pemaparan sebelah pelanggan

Kini, terdapat banyak rangka kerja MVC/MVVM sisi pelanggan yang serba boleh dan berkuasa, seperti AngularJS, Ember, Meteor, dll., menjadikannya sangat mudah untuk membina aplikasi satu halaman. Pada asasnya, anda hanya mendedahkan API dan mengembalikan respons JSON kepada klien tanpa memaparkan halaman di sebelah pelayan. Di sisi pelanggan, anda boleh menggunakan bingkai untuk mengatur JSON dan memaparkannya pada UI. Menghantar hanya respons JSON pada pelayan menjimatkan lebar jalur dan meningkatkan prestasi kerana anda tidak perlu mengembalikan penanda reka letak dalam setiap respons, bukan?

Lihat tutorial saya ini tentang cara mendedahkan API RESTful dengan Express 4. Saya juga menulis satu lagi tutorial yang menunjukkan cara menggabungkan API ini dengan AngularJS.

6 Jangan simpan terlalu banyak data dalam Sesi

Dalam aplikasi halaman Express biasa, data Sesi disimpan dalam ingatan secara lalai. Apabila anda menyimpan terlalu banyak data dalam Sesi, overhed pelayan akan meningkat dengan ketara. Jadi, sama ada anda bertukar kepada kaedah storan lain untuk menyimpan data Sesi, atau cuba mengurangkan jumlah data yang disimpan dalam Sesi.

Sebagai contoh, apabila pengguna log masuk ke aplikasi anda, anda boleh menyimpan hanya ID mereka dalam Sesi dan bukannya keseluruhan objek data pengguna. Selain itu, untuk pertanyaan di mana anda boleh mendapatkan objek melalui id, anda mungkin ingin menggunakan MongoDB atau Redis untuk menyimpan data sesi.

7. Pertanyaan Optimumkan

Andaikan anda mempunyai blog dan anda ingin memaparkan catatan terkini di halaman utama. Anda boleh mendapatkan semula data melalui Mongoose seperti ini:

Salin kod Kod adalah seperti berikut:

Post.find().limit(10).exec(function(err, posts) {
//hantar siaran kepada pelanggan
});

Tetapi masalahnya ialah kaedah find() Mongoose akan menanyakan semua medan objek, dan banyak medan tidak diperlukan pada halaman utama. Contohnya, kedai commentsis membalas siaran tertentu. Kami tidak perlu memaparkan balasan artikel, jadi kami boleh mengecualikannya semasa membuat pertanyaan. Ini pasti akan meningkatkan kelajuan. Anda boleh mengoptimumkan pertanyaan di atas seperti ini:
Salin kod Kod adalah seperti berikut:

Post.find().had(10).exclude('comments').exec(function(err, posts) {
//hantar siaran kepada pelanggan
});

8. Verwenden Sie die Standard-V8-Methode

Einige Vorgänge für Sammlungen, wie z. B. „map“, „reduce“ und „forEach“, werden möglicherweise nicht in allen Browsern unterstützt. Wir können einige Browserkompatibilitätsprobleme über die Front-End-Bibliothek lösen. Für Node.js müssen Sie jedoch genau wissen, welche Vorgänge die V8-JavaScript-Engine von Google unterstützt. Auf diese Weise können Sie diese integrierten Methoden direkt verwenden, um die Sammlung auf der Serverseite zu bearbeiten.

9. Verwenden Sie Nginx vor Node

Nginx ist ein kleiner, leichter Webserver, der die Belastung Ihres Node.js-Servers reduzieren kann. Sie können statische Ressourcen auf Nginx statt auf Node konfigurieren. Sie können gzip verwenden, um Antworten auf Nginx zu komprimieren und so alle Antworten kleiner zu machen. Wenn Sie also ein laufendes Produkt haben, sollten Sie meiner Meinung nach Nginx verwenden, um die Ausführungsgeschwindigkeit zu verbessern.

10. JavaScript verpacken

Schließlich können Sie die Geschwindigkeit der Seitenanwendung auch erheblich verbessern, indem Sie mehrere JS-Dateien packen. Wenn der Browser beim Rendern der Seite auf das Element