Bagaimana Node.js berbeda dari kerangka kerja sisi server lainnya?

21

Saya perhatikan bahwa Node.js telah menjadi sangat populer, dan saya telah melihat beberapa contoh orang yang melakukan proyek skala kecil di dalamnya.

Saya juga melihat daftar pro dan kontra untuk mendapatkan ide tentang apa yang dapat dilakukan Node.js, tetapi saya masih belum jelas bagaimana perbedaannya dari teknologi sisi server yang lebih matang seperti PHP, Perl, atau Ruby on. Rel.

Apa, khususnya, yang membedakan Node.js dari alternatif saat ini, dan mengapa?

Saeed Neamati
sumber
1
@ downvoter - mengapa downvote? kecuali untuk paragragh kedua (Anda tidak bisa benar-benar bertanya mengapa memulai sesuatu ketika orang lain melakukannya karena Anda selalu bisa melakukannya dengan lebih baik), saya menemukan pertanyaan ini menarik. Saya sering memikirkannya sendiri.
David Peterman
Ini adalah pilihan kecil, tetapi jika Anda menggunakan frasa "node.js" yang dikutip, Anda mendapat sekitar 3 juta klik.
Peter Rowell
@ Peter, ya, saya mencobanya, dan Anda benar. Tapi 3 juta masih dua. Anda dapat kembali setahun kemudian, dan angka ini mungkin mencapai 10 juta. :)
Saeed Neamati
3
@ Mark, terima kasih untuk hasil edit yang luar biasa. Sudah jelas sekarang.
Saeed Neamati

Jawaban:

18

Ada dua hal penting yang membuat Node.js berbeda dari kerangka sisi server yang ada, peristiwa asinkron , dan penggunaan JavaScript sebagai bahasa pemrograman.

Acara Asinkron

Sementara sebagian besar kerangka sisi server yang ada menggunakan arsitektur sinkron, Node.js menggunakan arsitektur asinkron , yang dapat ditangani dengan baik oleh JavaScript. Ini berarti bahwa server bereaksi terhadap peristiwa dan mengirim peristiwa (pesan) ke misalnya database. Gaya pemrograman ini sangat berbeda dengan gaya sinkron, dan mungkin sulit digunakan dengan bahasa lain. Node.js menggunakan gaya asinkron dengan IO asinkron dan dapat mengukur dengan baik.

Lihat juga Arsitektur Event Driven

JavaScript

JavaScript adalah bahasa pemrograman yang digunakan aplikasi web pada klien. Menggunakan bahasa yang sama di sisi server berarti bahwa pengembang dapat menerapkan pengetahuan JavaScript-nya baik pada klien dan server, dan menggunakan fungsi yang sama sesuai kebutuhan.

Saya akan merekomendasikan presentasi Pengantar Node.js dengan Ryan Dahl di mana ia menjelaskan arsitektur event-driven Node.js lebih terinci.

Jonas
sumber
2
Sejauh ini, ini adalah jawaban terbaik, tetapi saya akan menempatkan Asynchromous Events terlebih dahulu, karena itulah yang membuat Node.js begitu menarik sebagai kerangka kerja sisi server. Pekerjaan yang bagus, menyebutkan asinkron I / O dan skalabilitas. Itulah intinya.
Adam Crossland
Yah @ Jonas, saya masih tidak mengerti. ASP.NET juga berbasis acara. Lalu apa perbedaan antara Node.js, dan ASP.NET? Apakah hanya karena itu tidak sinkron? Dalam hal ini, saya pikir menggunakan multi-threading di ASP.NET dapat melakukan hal yang sama, bukan?
Saeed Neamati
3
@ Saeed: ASP.NET berulir dan sinkron, misalnya saat mengakses database, utas diblokir dan sedang menunggu balasan dari basis data. Dan ketika menggunakan banyak utas (mis. Satu permintaan) banyak memori digunakan (masing-masing utas membutuhkan jumlah memori yang cukup besar), yang mungkin menjadi hambatan. Node.js mengirim pesan dan bereaksi terhadap acara, sehingga tidak pernah (semoga) memblokir utas. Dengan node.js Anda menggunakan model pemrograman yang sama seperti pada sisi klien dengan Ajax ( javascript dan XML Asynchronous ), dan bahasa yang sama.
Jonas
Anda lupa komunitas open source di belakangnya.
Raynos
3
Ketika C # 5 berguling-guling dengan asynchal - hal baru meskipun itu mungkin berubah. Masalahnya bukan bahwa Anda tidak dapat menulis kode asinkron yang dapat diukur dalam bahasa lain, ini lebih sulit dilakukan (dengan benar) tanpa dukungan tingkat bahasa yang baik.
Davy8
6

Berbeda karena didorong oleh acara . Ini membuat server sangat terukur.

Pendeknya;

Model Thread

  1. Klien meminta sesuatu
  2. Server mati dan memproses permintaan
  3. Memberikannya kembali ke klien
  4. Siap memproses permintaan baru

Model Peristiwa

  1. Klien meminta sesuatu
  2. Server meneruskan permintaan untuk diproses. Siap memproses permintaan baru
  3. Server menangani lebih banyak permintaan saat masuk
  4. Server memberikan data kembali ke klien ketika permintaan telah selesai diproses
Tom Squires
sumber
@ Tom, apa yang Anda maksud dengan event-driven? ASP.NET WebForms juga dikendalikan oleh peristiwa dan Anda dapat melihat penangan suka Session_Startedatau Context_Authenticatedatau Page_Load?
Saeed Neamati
1
Menyebutnya event-driven lebih ambigu daripada yang diperlukan, dan itu tidak benar-benar sampai ke jantung Node.JS: asynchronous I / O.
Adam Crossland
2

Saya mendapat kesan bahwa popularitasnya adalah karena penggunaan JavaScript. Karena banyak pengembang web mengetahui JavaScript, ini adalah titik penjualan sehingga mereka sekarang dapat mengembangkan kode sisi server menggunakan bahasa yang sama. Ini memiliki beberapa keuntungan yang dapat saya pikirkan:

  • File kode dapat dibagi antara server dan klien, mencegah duplikasi usaha hanya untuk menangani dua sisi sistem.
  • Pengembang tidak perlu secara mental beralih antar bahasa. (bukan masalah besar menurut saya)
  • Arsitek tidak perlu memilih banyak bahasa saat merancang solusi web.
  • Seseorang yang tidak pernah mengembangkan kode sisi server sekarang dapat melakukannya tanpa belajar bahasa yang berbeda. (Tidak mungkin menjadi argumen yang berharga, IMHO)
John Fisher
sumber
Node.JS populer karena cepat dan bersisik dengan baik. Bahwa itu dalam JavaScript bagus, tetapi sebagian besar tidak disengaja.
Adam Crossland
2
Yang lebih berharga adalah bahwa pengembang sisi-server dapat menulis kode sisi-klien dalam bahasa yang sama, dan Anda dapat berbagi modul sisi-server dengan klien. Bukan sebaliknya. Saya tidak ingin mem-porting kode sisi-klien yang diretas ke server, yang menembak kaki Anda.
Raynos
@ Adam: Mengapa node.js menjadi populer ketika sudah ada teknologi yang sesuai dengan deskripsi "cepat dan skala baik"? - Karena itu JavaScript.
John Fisher
@ John Ini lebih sulit untuk menulis aplikasi yang tidak skala dengan baik di Node.js. Jika aplikasi Anda adalah disk / jaringan intensif daripada CPU-intensif (yang kebanyakan), Anda dapat dengan mudah mendukung koneksi simultan berkali-kali pada satu inti daripada kebanyakan server lain kecuali jika Anda menulis beberapa kode threading yang sangat rumit.
Davy8
@ Davy8: Saya kira itu semua tergantung pada kerangka / sistem lain yang telah Anda gunakan. Kemudahan skalabilitas yang Anda gambarkan sudah sederhana dengan alat yang saya gunakan. Satu-satunya yang ditawarkan Node.js dari sudut pandang saya adalah rasa JavaScript, yang tidak menarik.
John Fisher