Baru-baru ini ada banyak pujian untuk Node.js. Saya bukan pengembang yang memiliki banyak paparan aplikasi jaringan. Dari pemahaman saya tentang Nodes.js, kekuatannya adalah: kami hanya memiliki satu utas yang menangani beberapa koneksi, menyediakan arsitektur berbasis peristiwa.
Namun, misalnya di Jawa, saya hanya dapat membuat satu utas menggunakan NIO / AIO (yang merupakan non-blocking API dari pemahaman saya), dan menangani beberapa koneksi menggunakan utas itu, dan saya menyediakan arsitektur berbasis peristiwa untuk mengimplementasikan data menangani logika (tidak harus sesulit itu dengan memberikan panggilan balik dll)?
Mengingat JVM menjadi VM yang lebih matang daripada V8 (saya berharap ini berjalan lebih cepat juga), dan arsitektur penanganan berbasis peristiwa tampaknya menjadi sesuatu yang tidak sulit untuk dibuat, saya tidak yakin mengapa Node.js menarik begitu banyak perhatian. Apakah saya kehilangan beberapa poin penting?
sumber
Jawaban:
Meskipun konsep itu memang dapat diimplementasikan dalam banyak bahasa (dan seperti yang disebutkan dodgy_coder , konsep tersebut telah diimplementasikan dalam Ruby dan Python setidaknya), itu tidak sepele seperti yang Anda nyatakan.
Benar, Java memiliki API IO non-pemblokiran. Jadi Anda dapat melakukan raw disk / IO jaringan dengan cara yang tidak menghalangi. Namun setiap API yang entah bagaimana membungkus atau menangani IO perlu diimplementasikan dengan cara yang juga tidak menghalangi. Setiap parser XML, setiap driver Database, setiap konverter format file perlu ditulis untuk mendukung IO yang tidak menghalangi. Karena jika pustaka tunggal memblokir dalam pola ini, maka itu menurunkan kinerja server Anda ke nilai zaman batu.
Node.js memiliki infrastruktur perpustakaan itu, karena selalu dirancang seperti itu: setiap perpustakaan yang berusaha menjadi populer harus menyediakan API asinkron atau tidak akan digunakan.
sumber
Mungkin alasan utamanya adalah karena menggunakan JavaScript untuk menulis komponen sisi server untuk hal-hal seperti server web, aplikasi web, atau layanan web. Ini menyatukan JavaScript bahasa pengembangan ujung depan tradisional (sisi klien) dengan bahasa sisi server.
Anda benar - faktanya non-pemblokiran, menggunakan pola reaktor tidak unik - telah dilakukan sebelum menggunakan bahasa dan kerangka kerja lain, seperti EventMachine Ruby atau Python Twisted misalnya.
sumber
Tiga alasan utama yang akan saya berikan adalah:
IO Non Blocking / Asynchronous IO. Ini hash di mana-mana di web dan di poster sebelumnya. Satu hal yang saya akan berkontribusi adalah bahwa merancang kode Anda untuk secara eksplisit mengasumsikan perilaku asinkron membantu mesin kompiler untuk memaksimalkan perangkat keras. Ya, banyak dari kompiler JIT dan prosesor hyperthreading mengambil kode sinkron dan membantu memparalelkan eksekusi. Ini tentu saja merupakan pendekatan upaya terbaik. Sebaliknya, secara eksplisit membangun aplikasi untuk async io Anda memastikan mesin dan perangkat keras dapat memaksimalkan waktu eksekusi untuk kode Anda. Memang, saya tidak punya data kuantitatif untuk membuktikan ini, tetapi membuat saya merasa hangat untuk berpikir seperti ini.
Basis kode tunggal untuk klien dan server. Ini memiliki sejumlah keuntungan: membantu mengoptimalkan biaya pusat data dengan dapat memindahkan logika bisnis dari server ke klien; membantu menggunakan kembali logika bisnis / validasi data; mengurangi kompleksitas keterampilan pengembang yang perlu ada untuk mendukung produk (vs. Python & javascript).
Hambatan masuk yang rendah. Dalam banyak hal, Javascirpt seperti Basic, Pascal dan Perl dari tahun yang lalu. Sangat mudah untuk mulai menulis kode dan tidak memerlukan banyak pengetahuan domain untuk memulai. Ini juga membantu mengurangi biaya pengembangan Anda dengan bisa membawa lebih banyak pengembang jr dan meningkatkan proyek. [Tentu saja Anda harus melewati ideolog yang percaya bahasa pemrograman akan sulit untuk menyingkirkan pengembang yang berfungsi rendah]
sumber