Rumah hujung hadapan web tutorial js 3 cara untuk mengoptimumkan kod Node.js yang anda tidak tahu_node.js

3 cara untuk mengoptimumkan kod Node.js yang anda tidak tahu_node.js

May 16, 2016 pm 03:13 PM
node.js Pengoptimuman kod

Atur cara Node.js mungkin berjalan sangat perlahan disebabkan oleh pengehadan dalam operasi CPU atau input dan output. Dari perspektif CPU, salah satu sebab biasa program berjalan perlahan ialah "laluan panas" yang tidak dioptimumkan (sekeping kod yang kerap diakses). Dari perspektif input dan output, had kelajuan berjalan program mungkin dipengaruhi oleh sistem pengendalian asas, atau mungkin disebabkan oleh kegagalan Node itu sendiri. Atau, program perlahan mungkin tiada kaitan dengan Node itu sendiri Masalahnya terletak pada sumber luaran, seperti pertanyaan pangkalan data atau panggilan API yang lambat dan tidak dioptimumkan.

Dalam artikel ini, kami akan menumpukan pada mengenal pasti dan mengoptimumkan operasi dalam pangkalan kod yang menyebabkan operasi berat CPU. Pada masa yang sama, fail konfigurasi untuk aplikasi pengeluaran akan diterokai dan perubahan yang boleh meningkatkan kecekapan operasi akan dianalisis dan dibuat.

Disebabkan sifat satu-benang Node, adalah amat penting bagi pelayan untuk mengelakkan beban CPU yang berat. Kerana masa yang dihabiskan untuk CPU mengambil masa untuk bertindak balas kepada permintaan lain. Jika anda perasan bahawa aplikasi anda lambat bertindak balas dan CPU sentiasa tinggi semasa proses ini, menganalisis aplikasi anda boleh membantu mengenal pasti kesesakan dan membolehkan aplikasi anda kembali berjalan pantas.

Aplikasi Analisis
Meniru program lambat dalam pengeluaran adalah sukar dan memakan masa. Syukurlah, anda tidak perlu melakukan ini sendiri. Anda boleh mengumpul data profil pada pelayan pengeluaran anda dan menganalisisnya di luar talian. Mari kita lihat beberapa kaedah analisis.

1. Gunakan alatan peringkat kernel
Pertama, anda boleh menggunakan alatan peringkat kernel seperti DTrace (Solaris, BSD), perf (Linux) atau XPerf (Windows) untuk mengumpul surih tindanan daripada proses yang sedang berjalan dan kemudian menjana graf nyala. Analisis peringkat kernel mempunyai kesan yang minimum pada proses yang sedang berjalan. Graf nyalaan ialah grafik vektor yang dijana berdasarkan timbunan panggilan yang menyokong zum masuk dan keluar. Yunong Xiao daripada Netflix telah memberikan ucapan dan tweet yang hebat tentang perf dalam sistem Linux untuk membantu anda memperdalam pemahaman anda tentang teknologi ini. Jika anda ingin mengekalkan daya pengeluaran yang tinggi dalam aplikasi pengeluaran, pertimbangkan untuk menggunakan kaedah ini.

2,

2. Gunakan penganalisis V8
Pilihan lain ialah menggunakan profil V8 secara terus. Pendekatan ini berkongsi proses dengan program, jadi ia mempengaruhi prestasi program. Atas sebab ini, sila jalankan sahaja pemprofil V8 untuk menangkap output yang berkaitan apabila anda menghadapi masalah sedemikian. Manfaat pendekatan ini ialah anda boleh menggunakan semua alatan analisis Chrome dan outputnya (termasuk graf nyala) untuk menyiasat program.

Sila jalankan kod berikut untuk menguji program anda:

npm install v8-profiler --save
Salin selepas log masuk

Selepas itu, tambahkan kod berikut pada program anda:

const profiler = require('v8-profiler')
const fs = require('fs')
var profilerRunning = false
function toggleProfiling () {
 if (profilerRunning) {
  const profile = profiler.stopProfiling()
  console.log('stopped profiling')
  profile.export()
   .pipe(fs.createWriteStream('./myapp-'+Date.now()+'.cpuprofile'))
   .once('error', profiler.deleteAllProfiles)
   .once('finish', profiler.deleteAllProfiles)
  profilerRunning = false
  return
 }
 profiler.startProfiling()
 profilerRunning = true
 console.log('started profiling')
}
process.on('SIGUSR2', toggleProfiling)
Salin selepas log masuk

Sebaik sahaja anda menghantar isyarat SIGUSR2 ke proses ini, ia akan mula menganalisis. Analisis boleh dihentikan dengan menghantar isyarat SIGUSR2 sekali lagi (kod di bawah).

kill -SIGUSR2 [pid]
Salin selepas log masuk

Hasil analisis proses ini akan ditulis pada fail dalam laluan kerja semasa (sila pastikan laluan boleh ditulis). Memandangkan ini adalah antara muka boleh atur cara, anda boleh mencetuskannya sesuka hati (menggunakan titik akhir web, IPC, dll.). Jika anda mempunyai firasat tentang bila program anda akan menjadi perlahan, anda boleh mencetuskan antara muka ini pada bila-bila masa. Menyediakan pencetus automatik adalah berguna untuk mengelakkan pemantauan berterusan, tetapi ia memerlukan anda mempunyai pemahaman ramalan tentang masa dan tempoh tangkapan harus bertahan.

Setelah data profil telah dikumpulkan, muatkannya ke dalam Alat Pembangun Chrome dan mula menganalisis!

3. Gunakan pengurus proses
Walaupun menggunakan penganalisis V8 secara langsung adalah sangat cekap dan boleh disesuaikan, ia akan masuk ke dalam pangkalan kod anda dan menambah satu lagi pergantungan pada projek anda yang mungkin anda tidak mahu. Alternatifnya ialah menggunakan pengurus proses, yang boleh membungkus program anda dengan pelbagai alat apabila anda perlu menganalisisnya. Alat pilihan ialah alat baris arahan SLC daripada StrongLoop.

Mula-mula, jalankan npm install strongloop –g, kemudian jalankan kod berikut:

slc start [/path/to/app]
Salin selepas log masuk

Kod di atas akan melancarkan program anda dalam pengurus proses dan anda boleh mengekstrak data pemprofilan CPU atas permintaan. Untuk mengesahkan dan mendapatkan id aplikasi, jalankan:

slc ctl
Salin selepas log masuk

Anda akan mendapat hasil yang serupa dengan yang berikut:

Service ID: 1
Service Name: my-sluggish-app
Environment variables:
  Name   Value
  NODE_ENV production
Instances:
  Version Agent version Debugger version Cluster size Driver metadata
   5.0.1    2.0.2      1.0.0       1       N/A
Processes:
    ID   PID  WID Listening Ports Tracking objects? CPU profiling? Tracing? Debugging?
  1.1.61022 61022  0
  1.1.61023 61023  1   0.0.0.0:3000
Salin selepas log masuk

Id proses aplikasi pengesanan. Dalam contoh ini, id ialah 1.1.61023. Kini kita boleh memulakan analisis pada bila-bila masa dengan menjalankan kod berikut:

slc ctl cpu-start 1.1.61023
Salin selepas log masuk

当我们觉得已经捕获到了迟滞行为,就可以运行以下代码来停止分析器:

slc ctl cpu-stop 1.1.61023
Salin selepas log masuk

以下代码将写文件至硬盘:

CPU profile written to `node.1.1.61023.cpuprofile`, load into Chrome Dev Tools
Salin selepas log masuk

好啦,就是这样。你可以像在 V8 分析器里那样把文件加载到 Chrome 里面进一步分析。

作出正确决定
在本文中,笔者展示了三种在 Node 中捕获生产环境下 CPU 使用量的方式。那么,你应该选用哪一种呢?下面是一些帮助你缩小决策范围的想法:

  • 我需要分析很长一段时间:使用内核级工具。
  • 我想用 Chrome 开发工具:使用 V8 分析器或者过程管理器。
  • 我想捕获应用中的特定行为:使用 V8 分析器。
  • 我不想影响到程序性能:使用内核级程序
  • 我希望我不用挨个测试文件来获取程序分析信息:使用过程管理器

以上就是本文的全部内容,3种Node.js代码优化方式,希望大家可以熟练掌握。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penjelasan grafik terperinci tentang memori dan GC enjin Node V8 Penjelasan grafik terperinci tentang memori dan GC enjin Node V8 Mar 29, 2023 pm 06:02 PM

Artikel ini akan memberi anda pemahaman yang mendalam tentang memori dan pengumpul sampah (GC) enjin NodeJS V8 saya harap ia akan membantu anda!

Artikel tentang kawalan memori dalam Node Artikel tentang kawalan memori dalam Node Apr 26, 2023 pm 05:37 PM

Perkhidmatan Node yang dibina berdasarkan bukan sekatan dan dipacu peristiwa mempunyai kelebihan penggunaan memori yang rendah dan sangat sesuai untuk mengendalikan permintaan rangkaian besar-besaran. Di bawah premis permintaan besar-besaran, isu yang berkaitan dengan "kawalan memori" perlu dipertimbangkan. 1. Mekanisme kutipan sampah V8 dan had ingatan Js dikawal oleh mesin kutipan sampah

Mari bercakap secara mendalam tentang modul Fail dalam Node Mari bercakap secara mendalam tentang modul Fail dalam Node Apr 24, 2023 pm 05:49 PM

Modul fail ialah enkapsulasi operasi fail asas, seperti membaca/menulis/membuka/menutup/memadam fail, dsb. Ciri terbesar modul fail ialah semua kaedah menyediakan dua versi **segerak** dan ** asynchronous**, dengan Kaedah dengan akhiran penyegerakan adalah semua kaedah penyegerakan, dan kaedah yang tidak semuanya adalah kaedah heterogen.

Mari kita bincangkan tentang gelung acara dalam Node Mari kita bincangkan tentang gelung acara dalam Node Apr 11, 2023 pm 07:08 PM

Gelung peristiwa ialah bahagian asas Node.js dan mendayakan pengaturcaraan tak segerak dengan memastikan bahawa utas utama tidak disekat Memahami gelung peristiwa adalah penting untuk membina aplikasi yang cekap. Artikel berikut akan memberi anda pemahaman yang mendalam tentang gelung acara dalam Node.

Ketahui lebih lanjut tentang Penampan dalam Node Ketahui lebih lanjut tentang Penampan dalam Node Apr 25, 2023 pm 07:49 PM

Pada mulanya, JS hanya berjalan pada bahagian penyemak imbas Mudah untuk memproses rentetan berkod Unikod, tetapi sukar untuk memproses rentetan binari dan bukan berkod Unikod. Dan binari ialah format data peringkat terendah komputer, video/audio/program/pakej rangkaian

Bagaimana untuk memfaktorkan semula kod Java dengan baik Bagaimana untuk memfaktorkan semula kod Java dengan baik Jun 15, 2023 pm 09:17 PM

Sebagai salah satu bahasa pengaturcaraan yang paling popular di dunia, Java telah menjadi bahasa pilihan untuk banyak perniagaan dan pembangun. Walau bagaimanapun, pemfaktoran semula kod adalah penting untuk mengekalkan kualiti kod dan kecekapan pembangunan. Kod Java boleh menjadi semakin sukar untuk dikekalkan dari semasa ke semasa kerana kerumitannya. Artikel ini akan membincangkan cara memfaktorkan semula kod Java untuk meningkatkan kualiti dan kebolehselenggaraan kod. Fahami prinsip pemfaktoran semula Tujuan pemfaktoran semula kod Java adalah untuk menambah baik struktur, kebolehbacaan dan kebolehselenggaraan kod, dan bukannya "menukar kod". kerana

Artikel untuk membincangkan cara membangunkan aplikasi Node.js lapisan pembentangan dengan cekap Artikel untuk membincangkan cara membangunkan aplikasi Node.js lapisan pembentangan dengan cekap Apr 17, 2023 pm 07:02 PM

Bagaimana untuk menggunakan Node.js untuk pembangunan aplikasi bahagian hadapan? Artikel berikut akan memperkenalkan anda kepada kaedah membangunkan aplikasi bahagian hadapan dalam Node, yang melibatkan pembangunan aplikasi lapisan pembentangan. Penyelesaian yang saya kongsikan hari ini adalah untuk senario mudah Ia direka untuk membolehkan pembangun bahagian hadapan menyelesaikan beberapa tugas pembangunan bahagian pelayan yang mudah tanpa perlu menguasai terlalu banyak pengetahuan latar belakang dan pengetahuan profesional tentang Node.js, walaupun mereka tidak mempunyai pengekodan. pengalaman.

Apakah EventLoop? Bagaimana untuk menguji prestasi Node atau page Apakah EventLoop? Bagaimana untuk menguji prestasi Node atau page Mar 03, 2023 pm 07:47 PM

Semua orang harus tahu mekanisme Gelung Acara. Artikel ini menggunakan EventLoop untuk mencipta kod yang menarik untuk mengesan prestasi nod atau halaman Dengan cara ini, saya memperkenalkan EventLoop saya harap ia akan membantu semua orang.

See all articles