Konsep Dasar
Node.js , atau node, adalah platform yang memungkinkan JavaScript untuk berjalan di sisi server. Dapat dikatakan bahwa Node.js memelopori pengembangan modular javascript . Persyaratan javascript awal sangat sederhana, dan pada dasarnya ditulis sebagai fungsi, diikuti oleh penulisan yang berorientasi pada proses. Kemudian, ide-ide pengembangan yang berorientasi objek secara bertahap diperkenalkan, dan kemudian mereka perlahan-lahan ditulis ke dalam kelas. Akhirnya, kemunculan Node.js mulai memiliki konsep pengembangan modular JS, yang menghilangkan kode js yang membengkak seperti penamaan konflik dan masalah pembangunan lainnya.
Fitur terbesar Node adalah adopsi I/O asinkron dan desain arsitektur yang digerakkan oleh acara. Node.js adalah platform yang memungkinkan JS berjalan di luar browser. Tujuan awalnya adalah untuk mengimplementasikan server web I/O yang digerakkan oleh peristiwa
Node.js hanyalah lingkungan yang menjalankan JavaScript (atau satu set perpustakaan), yang melengkapi js standar dengan fungsi IO asinkron, yaitu, membaca dan menulis jaringan dan file.
Sebagai perpustakaan, itu tidak lebih dari API nada. Selain panggilan balik acara yang sedikit anti-manusia, itu tidak jauh berbeda dari bahasa back-end lainnya (PHP, Python).
Node.js menggunakan mode utas tunggal. Setiap utas menyelesaikan fungsi. Suatu proses dapat memiliki banyak utas. Semua I/Os digunakan dalam metode permintaan asinkron. Setelah setiap permintaan I/O asinkron selesai, itu akan didorong ke antrian acara dan menunggu proses program untuk diproses.
Singkatnya, gagasan inti dari node adalah: non-blocking, utas tunggal dan didorong oleh peristiwa. (Sinkron sesuai dengan pemblokiran, asinkron sesuai dengan non-blocking)
Diagram Arsitektur Node.JS
Tunggal berulir
Lingkungan eksekusi bahasa javascript adalah "utas tunggal".
Yang disebut "utas tunggal" berarti bahwa satu tugas hanya dapat diselesaikan sekaligus. Jika ada beberapa tugas, Anda harus mengantri, menyelesaikan tugas sebelumnya, menjalankan tugas berikutnya, dan sebagainya.
Keuntungan dari model ini adalah relatif sederhana untuk diterapkan dan lingkungan eksekusi relatif sederhana; Kerugiannya adalah bahwa selama ada tugas yang membutuhkan waktu lama, tugas -tugas selanjutnya harus diantri, yang akan menunda pelaksanaan seluruh program. Browser umum tidak responsif (kematian palsu) sering karena sepotong kode Javascript tertentu berjalan untuk waktu yang lama (seperti loop mati), menyebabkan seluruh halaman macet di tempat ini dan tugas -tugas lain tidak dapat dieksekusi.
Kemacetan sebagian besar aplikasi web ada di I/O , yaitu, membaca dan menulis disk, membaca dan menulis jaringan, dan membaca dan menulis database. Strategi apa yang akan digunakan untuk menunggu periode waktu ini telah menjadi poin kunci untuk meningkatkan kinerja
Sinkron dan asinkron
Untuk mengatasi masalah ini, bahasa Javascript membagi mode eksekusi tugas menjadi dua jenis: sinkron (sinkron) dan asinkron (asinkron).
"Mode Sinkron" adalah mode bagian sebelumnya. Tugas terakhir menunggu tugas sebelumnya berakhir dan kemudian dieksekusi. Urutan eksekusi program konsisten dan sinkron dengan urutan pengaturan tugas; "Mode asinkron" sangat berbeda. Setiap tugas memiliki satu atau lebih fungsi panggilan balik ( callback ). Setelah tugas sebelumnya selesai, ini bukan tugas berikutnya, tetapi fungsi panggilan balik dijalankan. Tugas terakhir dieksekusi tanpa menunggu tugas sebelumnya berakhir, sehingga urutan eksekusi program tidak konsisten dan tidak sinkron dengan urutan pengaturan tugas.
"Mode async" sangat penting. Di sisi browser, operasi jangka panjang harus dieksekusi secara tidak sinkron untuk menghindari browser dari kehilangan respons. Contoh terbaik adalah operasi AJAX. Di sisi server, "Mode Asynchronous" bahkan adalah satu-satunya mode, karena lingkungan eksekusi adalah satu utamanya, jika semua permintaan http diizinkan untuk dieksekusi secara serempak, kinerja server akan turun dengan tajam dan akan segera kehilangan tanggapannya.
Proses dan utas
Proses dan utas dalam sistem Mac
Dari gambar tersebut, kita dapat melihat bahwa suatu proses dapat mencakup beberapa utas. Proses seperti lokakarya dalam proyek. Thread adalah pekerja di lokakarya ini. Dalam sistem operasi yang memperkenalkan utas, mereka biasanya menggunakan proses sebagai unit dasar untuk mengalokasikan sumber daya, dan utas sebagai unit dasar untuk operasi independen dan penjadwalan independen. Karena utas lebih kecil dari proses dan pada dasarnya tidak memiliki sumber daya sistem, overhead penjadwalan akan jauh lebih kecil, yang dapat lebih efisien meningkatkan tingkat eksekusi bersamaan antara beberapa program dalam sistem.
perbedaannya
Perbedaan antara utas dan proses adalah bahwa proses anak dan proses induk memiliki kode dan ruang data yang berbeda, sementara beberapa utas berbagi ruang data, masing -masing utas memiliki tumpukan eksekusi sendiri dan penghitung program untuk konteks eksekusi. Multithreading terutama digunakan untuk menghemat waktu CPU dan menggunakannya sesuai dengan situasi tertentu. Sumber daya memori komputer dan CPU harus digunakan selama menjalankan utas.
Modul dan modul paket
Modul: File yang mengimplementasikan fungsi spesifik tertentu untuk mengimplementasikan pemrograman modular. Memperkenalkan modul melalui kebutuhan (nama modul).
- Fungsi dalam modul (seperti variabel, fungsi) disediakan untuk penelepon dengan menetapkan properti ke objek exports .
Bagaimana cara menggunakan modul?
Sangat nyaman untuk menggunakan modul dalam node. Dalam kode JavaScript , Anda dapat secara langsung menggunakan fungsi global require() untuk memuat modul. Misalnya, kami dapat menggunakan require("http") untuk memuat modul server http yang dilengkapi dengan node .
Tas
Paket: Paket adalah folder yang merangkum modul untuk rilis, pembaruan, manajemen ketergantungan, dan kontrol versi. Jelaskan informasi paket melalui package.json: file entri, paket eksternal ketergantungan, dll. Instal paket melalui perintah npm install dan gunakan paket melalui require .
I/O Asynchronous dan Event-Driven
Mekanisme asinkron Node.js 'berbasis peristiwa. Setiap I/O adalah permintaan. Semua Disk I/O , Komunikasi Jaringan, dan kueri basis data diminta dengan cara yang tidak blokir. Hasil yang dikembalikan diproses oleh Loop Acara. Seperti yang ditunjukkan pada gambar di bawah ini:
Proses Node.js hanya akan memproses satu acara pada saat yang sama, dan segera masukkan loop acara untuk memeriksa dan memproses peristiwa selanjutnya setelah selesai. Keuntungan dari ini adalah bahwa CPU dan memori ada pada saat yang sama untuk memusatkan satu hal sambil membiarkan operasi I/O yang memakan waktu dieksekusi secara paralel sebanyak mungkin
Mulai Pemrograman Node
Di sini, saya sarankan Anda menggunakan webstorm untuk pengembangan node.js , yang nyaman dan cepat, dan jauh lebih mudah digunakan daripada CMD atau terminal di bawah Mac.
Sedangkan untuk instalasi node, silakan Baidu sendiri. Saya tidak akan membahas detailnya di sini. Mari kita lihat antarmuka pemrograman node di bawah webstorm :
Kita hanya perlu mengklik kanan antarmuka kode node tertulis dan klik run, yang nyaman dan cepat
Berikut ini adalah antarmuka output node:
Dalam sistem Mac , saya merekomendasikan tiga alat yang saya gunakan: CODA2, Webstorm dan Sublime Text3. Ini adalah alat pengembangan terbaik yang saya miliki sejauh ini. Anda mungkin juga mencoba mana yang lebih sesuai dengan selera Anda.
Untuk pengembangan simpul di webstorm , Anda perlu mengkonfigurasi file tertentu terlebih dahulu. Setiap orang harus menggunakan Baidu untuk melakukannya. Karena webstorm saya telah dikonfigurasi, saya tidak dapat mengambil tangkapan layar untuk menunjukkan langkah -langkahnya. Langkah -langkah umum adalah: di bawah sistem Mac, klik pertama webstorm di bilah atas, lalu klik perference , lalu klik Node.js and NPM , lalu klik konfigurasikan di sisi kanan, dan akhirnya akan terlihat seperti berikut:
Langkah -langkah proses di bawah sistem windows kira -kira mirip dengan proses ini. Versi yang saya gunakan adalah 8.0.4.
Variabel global
Dalam pemrograman JS, yang terbaik adalah menambahkan kata kunci VAR ke setiap variabel untuk menghindari mencemari namespace global dan meningkatkan risiko kopling kode.
menghibur
console digunakan untuk menampilkan karakter ke standout stream output standar (STDOUT) dan aliran kesalahan standar (STDERR).
console.log() mencetak karakter ke aliran output standar dan diakhiri dengan garis baru, yang menerima beberapa parameter dan akan menjadi output dalam format printf() c-like format
console.log(__dirname)输出文件目录Hitung waktu berjalan kode
console.time(label) console.timeEnd(label)Kami hanya perlu memberikan label yang sama di awal dan akhir, dan meletakkan kode apa pun yang ingin Anda hitung waktu eksekusi di tengah.
__filename dan __dirname
console.log(__filename);// /Users/hwax/Desktop/My Project/avalon/hello.js console.log(__dirname);// /Users/hwax/Desktop/My Project/avalon