Saya baru untuk hal semacam ini, tapi belakangan ini saya telah mendengar banyak tentang seberapa baik Node.js adalah. Mempertimbangkan seberapa besar saya suka bekerja dengan jQuery dan JavaScript secara umum, saya tidak bisa tidak bertanya-tanya bagaimana memutuskan kapan harus menggunakan Node.js. Aplikasi web yang ada dalam pikiran saya adalah sesuatu seperti Bitly - mengambil beberapa konten, mengarsipkannya.
Dari semua pekerjaan rumah yang telah saya lakukan dalam beberapa hari terakhir, saya memperoleh informasi berikut. Node.js
- adalah alat baris perintah yang dapat dijalankan sebagai server web biasa dan memungkinkan seseorang menjalankan program JavaScript
- menggunakan mesin JavaScript V8 yang hebat
- sangat baik ketika Anda perlu melakukan beberapa hal sekaligus
- berbasis acara sehingga semua hal yang mirip Ajax bisa dilakukan di sisi server
- memungkinkan kami berbagi kode antara browser dan backend
- mari kita bicara dengan MySQL
Beberapa sumber yang saya temui adalah:
- Menyelam ke Node.js - Pendahuluan dan Instalasi
- Memahami NodeJS
- Node dengan Contoh ( Archive.is )
- Mari Membuat Aplikasi Web: NodePad
Mempertimbangkan bahwa Node.js dapat dijalankan hampir di luar kotak pada contoh EC2 Amazon , saya mencoba untuk memahami jenis masalah apa yang memerlukan Node.js sebagai lawan dari salah satu raja perkasa di luar sana seperti PHP , Python dan Ruby . Saya mengerti bahwa itu benar-benar tergantung pada keahlian yang dimiliki seseorang pada suatu bahasa, tetapi pertanyaan saya lebih banyak masuk ke dalam kategori umum: Kapan menggunakan kerangka kerja tertentu dan jenis masalah apa yang cocok untuknya?
sumber
Jawaban:
Anda melakukan pekerjaan yang hebat untuk meringkas apa yang hebat tentang Node.js. Perasaan saya adalah Node.js sangat cocok untuk aplikasi di mana Anda ingin mempertahankan koneksi terus-menerus dari browser kembali ke server. Menggunakan teknik yang dikenal sebagai "polling panjang" , Anda dapat menulis aplikasi yang mengirimkan pembaruan kepada pengguna secara real time. Melakukan polling panjang pada banyak raksasa web, seperti Ruby on Rails atau Django , akan menciptakan beban yang sangat besar di server, karena setiap klien yang aktif memakan satu proses server. Situasi ini sama dengan serangan tarpit . Ketika Anda menggunakan sesuatu seperti Node.js, server tidak perlu mempertahankan utas terpisah untuk setiap koneksi yang terbuka.
Ini berarti Anda dapat membuat aplikasi obrolan berbasis browser di Node.js yang hampir tidak memerlukan sumber daya sistem untuk melayani banyak klien. Kapan pun Anda ingin melakukan polling panjang ini, Node.js adalah pilihan yang bagus.
Layak disebutkan bahwa Ruby dan Python keduanya memiliki alat untuk melakukan hal semacam ini ( masing-masing mesin dan memutar ), tetapi Node.js melakukannya dengan sangat baik, dan dari bawah ke atas. JavaScript sangat baik terletak pada model konkurensi berbasis panggilan balik, dan unggul di sini. Juga, bisa membuat serial dan deserialize dengan JSON asli ke klien dan server cukup bagus.
Saya berharap dapat membaca jawaban lain di sini, ini adalah pertanyaan yang fantastis.
Perlu ditunjukkan bahwa Node.js juga bagus untuk situasi di mana Anda akan menggunakan kembali banyak kode di celah klien / server. The kerangka Meteor membuat ini sangat mudah, dan banyak orang menyarankan ini mungkin menjadi masa depan pengembangan web. Saya dapat mengatakan dari pengalaman bahwa sangat menyenangkan untuk menulis kode di Meteor, dan sebagian besar dari ini menghabiskan lebih sedikit waktu untuk memikirkan bagaimana Anda akan merestrukturisasi data Anda, sehingga kode yang berjalan di browser dapat dengan mudah memanipulasi dan mengembalikannya.
Inilah artikel tentang Piramida dan polling panjang, yang ternyata sangat mudah dibuat dengan sedikit bantuan dari gevent: TicTacToe dan Polling Panjang dengan Piramida .
sumber
Saya percaya Node.js paling cocok untuk aplikasi waktu nyata: game online, alat kolaborasi, ruang obrolan, atau apa pun yang dilakukan oleh satu pengguna (atau robot? Atau sensor?) Dengan aplikasi perlu dilihat oleh pengguna lain segera, tanpa refresh halaman.
Saya juga harus menyebutkan bahwa Socket.IO dalam kombinasi dengan Node.js akan mengurangi latensi real-time Anda lebih jauh dari apa yang mungkin terjadi dengan polling yang lama. Socket.IO akan kembali ke polling lama sebagai skenario terburuk, dan alih-alih menggunakan soket web atau bahkan Flash jika tersedia.
Tetapi saya juga harus menyebutkan bahwa hampir semua situasi di mana kode mungkin memblokir karena utas dapat lebih baik ditangani dengan Node.js. Atau situasi apa pun di mana Anda memerlukan aplikasi untuk dikendalikan oleh peristiwa.
Juga, Ryan Dahl mengatakan dalam sebuah pembicaraan bahwa saya pernah menghadiri bahwa tolok ukur Node.js sangat menyaingi Nginx untuk permintaan HTTP lama yang biasa. Jadi jika kita membangun dengan Node.js, kita dapat melayani sumber daya normal kita dengan cukup efektif, dan ketika kita membutuhkan hal-hal yang digerakkan oleh peristiwa, ia siap menanganinya.
Ditambah lagi itu semua JavaScript sepanjang waktu. Lingua Franca di seluruh tumpukan.
sumber
.js
file saya yang berbeda . Hijau untuk sisi klien, biru untuk sisi server. Saya terus "tersesat" sendiri.Alasan menggunakan NodeJS:
Ini menjalankan Javascript, sehingga Anda dapat menggunakan bahasa yang sama di server dan klien, dan bahkan berbagi beberapa kode di antara mereka (misalnya untuk validasi formulir, atau untuk membuat tampilan di kedua ujungnya.)
Sistem yang digerakkan oleh single-threaded sangat cepat bahkan ketika menangani banyak permintaan sekaligus, dan juga sederhana, dibandingkan dengan kerangka kerja Java atau ROR tradisional multi-threaded .
Kumpulan paket yang terus tumbuh dapat diakses melalui NPM , termasuk pustaka / modul sisi klien dan server, serta alat baris perintah untuk pengembangan web. Sebagian besar di-host dengan nyaman di github, di mana kadang-kadang Anda dapat melaporkan masalah dan menemukannya dalam hitungan jam! Sangat menyenangkan memiliki segalanya dalam satu atap, dengan pelaporan masalah terstandarisasi dan forking yang mudah.
Ini telah menjadi lingkungan standar defacto di mana untuk menjalankan alat terkait Javascript dan alat terkait web lainnya , termasuk pelari tugas, minifiers, beautifiers, linter, preprocessor, bundlers dan prosesor analitik.
Tampaknya cukup cocok untuk membuat prototipe, pengembangan gesit dan iterasi produk yang cepat .
Alasan tidak menggunakan NodeJS:
Ini menjalankan Javascript, yang tidak memiliki pemeriksaan tipe waktu kompilasi. Untuk sistem besar yang kritis-keselamatan , yang rumit , atau proyek termasuk kolaborasi antara organisasi yang berbeda, bahasa yang mendorong antarmuka kontrak dan menyediakan pemeriksaan tipe statis dapat menghemat waktu debugging (dan ledakan ) dalam jangka panjang. (Meskipun JVM macet
null
, jadi silakan gunakan Haskell untuk reaktor nuklir Anda.)Selain itu, banyak paket dalam NPM sedikit mentah , dan masih dalam pengembangan cepat. Beberapa perpustakaan untuk kerangka kerja yang lebih lama telah mengalami satu dekade pengujian dan perbaikan bug, dan sangat stabil sekarang. Npmjs.org tidak memiliki mekanisme untuk memeringkat paket , yang menyebabkan proliferasi paket melakukan hal yang kurang lebih sama, di mana sebagian besar tidak lagi dipertahankan.
Callback bersarang neraka. (Tentu saja ada 20 solusi berbeda untuk ini ...)
Kumpulan paket yang terus tumbuh dapat membuat satu proyek NodeJS tampak sangat berbeda dari yang lain. Ada keragaman besar dalam implementasi karena banyaknya pilihan yang tersedia (misalnya Express / Sails.js / Meteor / Derby ). Ini kadang-kadang dapat mempersulit pengembang baru untuk ikut serta dalam proyek Node. Bandingkan dengan pengembang Rails yang bergabung dengan proyek yang sudah ada: ia harus bisa mengenal aplikasi dengan cepat, karena semua aplikasi Rails didorong untuk menggunakan struktur yang sama .
Berurusan dengan file bisa sedikit menyusahkan. Hal-hal yang sepele dalam bahasa lain, seperti membaca baris dari file teks, cukup aneh untuk dilakukan dengan Node.js bahwa ada pertanyaan StackOverflow dengan 80+ upvotes. Tidak ada cara sederhana untuk membaca satu catatan pada satu waktu dari file CSV . Dll
Saya suka NodeJS, cepat dan liar, dan menyenangkan, tetapi saya khawatir ini kurang tertarik pada kebenaran yang bisa dibuktikan. Semoga saja kita bisa menggabungkan yang terbaik dari kedua dunia. Saya ingin melihat apa yang akan menggantikan Node di masa depan ... :)
sumber
npm search
dannpm show
akan menunjukkan tanggal rilis terakhir paket kepada Anda.Singkatnya:
Node.js sangat cocok untuk aplikasi yang memiliki banyak koneksi konkuren dan setiap permintaan hanya membutuhkan siklus CPU yang sangat sedikit, karena loop acara (dengan semua klien lain) diblokir selama pelaksanaan fungsi.
Sebuah artikel yang baik tentang loop acara di Node.js adalah blog teknologi Mixu ini: Memahami node.js loop acara .
sumber
Saya punya satu contoh dunia nyata di mana saya menggunakan Node.js. Perusahaan tempat saya bekerja mendapat satu klien yang ingin memiliki situs web HTML statis sederhana. Situs web ini untuk menjual satu item menggunakan PayPal dan klien juga ingin memiliki penghitung yang menunjukkan jumlah item yang terjual. Klien diharapkan memiliki sejumlah besar pengunjung ke situs web ini. Saya memutuskan untuk membuat konter menggunakan Node.js dan kerangka Express.js .
Aplikasi Node.js sederhana. Dapatkan jumlah item yang terjual dari basis data Redis , tambah penghitung saat item dijual dan sajikan nilai penghitung kepada pengguna melalui API .
Beberapa alasan mengapa saya memilih untuk menggunakan Node.js dalam kasus ini
Dalam hal ini, Node.js adalah pilihan yang luar biasa.
sumber
Alasan paling penting untuk memulai proyek Anda berikutnya menggunakan Node ...
Apa yang diharapkan ...
Siapa yang menggunakannya?
sumber
async
/await
jadi sekarang kita dapat meluncurkan kode Node async yang jauh lebih bersih yang juga mendukung tradisionaltry
/catch
. Pada 2016/17 JS coders beralih ke ES6.Tidak ada yang seperti Silver Bullet. Semuanya datang dengan biaya yang terkait dengannya. Ini seperti jika Anda makan makanan berminyak, Anda akan membahayakan kesehatan Anda dan makanan sehat tidak datang dengan rempah-rempah seperti makanan berminyak. Ini adalah pilihan individu apakah mereka menginginkan kesehatan atau rempah-rempah seperti dalam makanan mereka. Cara yang sama yang Node.js pertimbangkan untuk digunakan dalam skenario tertentu. Jika aplikasi Anda tidak sesuai dengan skenario itu, Anda sebaiknya tidak mempertimbangkannya untuk pengembangan aplikasi Anda. Saya hanya memikirkan hal yang sama:
Kapan menggunakan Node.JS
Kapan TIDAK menggunakan Node.JS
Pertimbangan Skalabilitas dengan Node.JS
Alternatif Node.JS
Ada pilihan lain untuk digunakan sebagai pengganti Node.JS namun Vert.x tampaknya cukup menjanjikan dan memiliki banyak fitur tambahan seperti poligot dan pertimbangan skalabilitas yang lebih baik.
sumber
fork
. Lihat stackoverflow.com/questions/9546225/… . Node menangani beberapa core dengan sangat baik dengancluster
modul. nodejs.org/api/cluster.htmlHal hebat lainnya yang menurut saya belum ada yang menyebutkan tentang Node.js adalah komunitas yang luar biasa, sistem manajemen paket (npm) dan jumlah modul yang ada yang dapat Anda sertakan dengan memasukkannya ke dalam file package.json Anda.
sumber
Bagian saya: nodejs sangat bagus untuk membuat sistem waktu nyata seperti analitik, aplikasi chat, apis, server iklan, dll. Sial, saya membuat aplikasi chat pertama saya menggunakan nodejs dan socket.io kurang dari 2 jam dan itu juga selama minggu ujian!
Edit
Sudah beberapa tahun sejak saya mulai menggunakan nodejs dan saya telah menggunakannya dalam membuat berbagai hal termasuk server file statis, analitik sederhana, aplikasi obrolan dan banyak lagi. Ini adalah pendapat saya tentang kapan harus menggunakan nodejs
Kapan harus digunakan
Saat membuat sistem yang mengutamakan konkurensi dan kecepatan.
Kapan tidak digunakan
Ini adalah server web yang sangat serbaguna sehingga Anda dapat menggunakannya di mana pun Anda inginkan, tetapi mungkin bukan tempat-tempat ini.
Perlu diingat bahwa saya hanya nitpicking. Untuk server file statis, apache lebih baik terutama karena tersedia secara luas. Komunitas nodejs telah tumbuh lebih besar dan lebih matang selama bertahun-tahun dan aman untuk mengatakan nodejs dapat digunakan di mana saja jika Anda memiliki pilihan hosting sendiri.
sumber
Itu bisa digunakan dimana
Di depan Mobile, perusahaan prime-time mengandalkan Node.js untuk solusi mobile mereka. Lihat mengapa?
LinkedIn adalah pengguna terkemuka. Seluruh tumpukan mobile mereka dibangun di atas Node.js. Mereka beralih dari menjalankan 15 server dengan 15 instance pada setiap mesin fisik, menjadi hanya 4 instance - yang dapat menangani lalu lintas dua kali lipat!
eBay meluncurkan ql.io, bahasa permintaan web untuk API HTTP, yang menggunakan Node.js sebagai tumpukan runtime. Mereka dapat menyetel workstation Ubuntu berkualitas pengembang biasa untuk menangani lebih dari 120.000 koneksi aktif per proses node.js, dengan setiap koneksi mengkonsumsi sekitar 2kB memori!
Walmart merekayasa ulang aplikasi selulernya untuk menggunakan Node.js dan mendorong pemrosesan JavaScript-nya ke server.
Baca lebih lanjut di: http://www.pixelatingbits.com/a-closer-look-at-mobile-app-development-with-node-js/
sumber
Node terbaik untuk penanganan permintaan bersamaan -
Jadi, mari kita mulai dengan sebuah cerita. Dari 2 tahun terakhir saya mengerjakan JavaScript dan mengembangkan web front end dan saya menikmatinya. Back end guys berikan kita beberapa API yang ditulis dalam Java, python (kami tidak peduli) dan kami hanya menulis panggilan AJAX, dapatkan data kami dan coba tebak! kita sudah selesai. Tetapi sebenarnya itu tidak mudah, Jika data yang kita peroleh tidak benar atau ada beberapa kesalahan server maka kita macet dan kita harus menghubungi orang-orang back end kita melalui surat atau obrolan (kadang-kadang di whatsApp juga :).) Ini tidak keren Bagaimana jika kita menulis API kita dalam JavaScript dan memanggil API itu dari ujung depan kita? Ya itu sangat keren karena jika kita menghadapi masalah di API kita dapat memeriksanya. Tebak apa ! Anda bisa melakukan ini sekarang, Bagaimana? - Node ada untukmu.
Ok setuju bahwa Anda dapat menulis API Anda dalam JavaScript tetapi bagaimana jika saya setuju dengan masalah di atas. Apakah Anda punya alasan lain untuk menggunakan simpul untuk API sisanya?
jadi inilah keajaiban dimulai. Ya saya punya alasan lain untuk menggunakan simpul untuk API kami.
Mari kita kembali ke sistem API tradisional kami yang didasarkan pada operasi pemblokiran atau threading. Misalkan dua permintaan bersamaan terjadi (r1 dan r2), masing-masing membutuhkan operasi basis data. Jadi, dalam sistem tradisional apa yang akan terjadi:
1. Cara Menunggu: Server kami mulai melayani
r1
permintaan dan menunggu respons permintaan. setelah selesair1
, server mulai melayanir2
dan melakukannya dengan cara yang sama. Jadi menunggu bukanlah ide yang baik karena kita tidak punya banyak waktu.2. Cara Threading: Server kami akan membuat dua utas untuk kedua permintaan
r1
danr2
dan melayani tujuan mereka setelah meminta basis data dengan sangat cepat. maka Anda harus berurusan dengan masalah semacam kebuntuan. Jadi ini lebih baik daripada menunggu tetapi masih ada masalah.Sekarang di sini adalah, bagaimana simpul akan melakukannya:
3. Nodeway: Ketika permintaan bersamaan yang sama datang dalam node maka itu akan mendaftarkan acara dengan callback dan bergerak maju itu tidak akan menunggu respons permintaan untuk permintaan tertentu. Jadi ketika
r1
permintaan datang maka simpul acara simpul (ya ada loop acara di node yang melayani tujuan ini.) mendaftarkan suatu acara dengan fungsi panggilan baliknya dan bergerak maju untuk melayanir2
permintaan dan juga mendaftarkan acara tersebut dengan panggilan baliknya. Setiap kali kueri selesai, ia memicu acara terkait dan mengeksekusi callback-nya sampai selesai tanpa terganggu.Jadi tidak perlu menunggu, tidak ada threading, tidak ada konsumsi memori - ya ini jalan bebas hambatan untuk melayani API lainnya.
sumber
Saya satu lagi alasan untuk memilih Node.js untuk proyek baru adalah:
Mampu melakukan pengembangan berbasis cloud murni
Saya telah menggunakan Cloud9 IDE untuk sementara waktu dan sekarang saya tidak bisa membayangkan tanpanya, ia mencakup semua siklus pengembangan. Yang Anda butuhkan hanyalah peramban dan Anda bisa membuat kode kapan saja di mana saja di perangkat apa pun. Anda tidak perlu memeriksa kode di satu Komputer (seperti di rumah), lalu checkout di komputer lain (seperti di tempat kerja).
Tentu saja, mungkin ada IDE berbasis cloud untuk bahasa atau platform lain (Cloud 9 IDE juga menambahkan dukungan untuk bahasa lain), tetapi menggunakan Cloud 9 untuk melakukan pengembangan Node.js benar-benar pengalaman hebat bagi saya.
sumber
Satu hal lagi yang disediakan node adalah kemampuan untuk membuat beberapa instalan v8 node menggunakan proses anak simpul ( childProcess.fork () masing-masing membutuhkan memori 10mb sesuai dokumen) dengan cepat, sehingga tidak memengaruhi proses utama menjalankan server. Jadi membongkar pekerjaan latar belakang yang membutuhkan beban server besar menjadi permainan anak-anak dan kita dapat dengan mudah membunuh mereka saat dan ketika dibutuhkan.
Saya sudah sering menggunakan simpul dan di sebagian besar aplikasi yang kami bangun, memerlukan koneksi server pada saat yang sama sehingga lalu lintas jaringan yang padat. Kerangka kerja seperti Express.js dan Koajs baru (yang menghapus panggilan balik neraka) telah membuat bekerja pada node lebih mudah.
sumber
Mengenakan asbes longjohns ...
Kemarin judul saya dengan Publikasi Publikasi, Pemrograman Reaktif dengan JavaScript . Itu sebenarnya bukan judul Node.js-centric; bab-bab awal dimaksudkan untuk membahas teori, dan bab-bab selanjutnya membahas praktik. Karena saya tidak benar-benar berpikir itu akan sesuai untuk gagal untuk memberikan pembaca webserver, Node.js tampak jauh pilihan yang jelas. Kasing ditutup sebelum dibuka.
Saya bisa memberikan pandangan yang sangat indah tentang pengalaman saya dengan Node.js. Sebaliknya saya jujur tentang poin baik dan buruk yang saya temui.
Biarkan saya sertakan beberapa kutipan yang relevan di sini:
Apendiks, yang sebenarnya tidak saya inginkan setelah naiknya crescendo pada bab-bab terakhir dan kesimpulannya, berbicara tentang apa yang dapat saya temukan di ekosistem, dan memberikan solusi untuk literalisme gila:
Bertukar dua komentar secara berurutan:
sumber
Jika aplikasi Anda terutama mengikat web apis, atau saluran io lainnya, beri atau ambil antarmuka pengguna, node.js mungkin merupakan pilihan yang adil untuk Anda, terutama jika Anda ingin memeras skalabilitas yang paling banyak, atau, jika bahasa utama Anda dalam hidup adalah javascript (atau pengalih javascript). Jika Anda membangun microservices, node.js juga oke. Node.js juga cocok untuk proyek apa pun yang kecil atau sederhana.
Nilai jual utamanya adalah memungkinkan front-ender mengambil tanggung jawab untuk hal-hal back-end daripada pembagian tipikal. Titik penjualan lain yang dapat dibenarkan adalah jika tenaga kerja Anda berorientasi pada javascript untuk memulai.
Namun, di luar titik tertentu, Anda tidak dapat membuat skala kode Anda tanpa peretasan yang mengerikan karena memaksa modularitas, keterbacaan, dan kontrol aliran. Namun, beberapa orang menyukai peretasan tersebut, terutama yang berasal dari latar belakang javascript yang dipicu oleh peristiwa, mereka tampak akrab atau dapat dimaafkan.
Khususnya, ketika aplikasi Anda perlu melakukan aliran sinkron, Anda mulai mengalami pendarahan pada solusi setengah matang yang memperlambat Anda dalam hal proses pengembangan Anda. Jika Anda memiliki bagian intensif perhitungan dalam aplikasi Anda, tapak dengan hati-hati memilih (hanya) node.js. Mungkin http://koajs.com/ atau hal baru lainnya meringankan aspek-aspek yang awalnya sulit, dibandingkan dengan ketika saya awalnya menggunakan node.js atau menulis ini.
sumber
Saya dapat berbagi beberapa poin di mana & mengapa menggunakan simpul js.
Kekurangan: -
Kesimpulan: - Nodejs terbaik untuk digunakan untuk aplikasi waktu nyata dan sederhana .. jika Anda memiliki logika bisnis yang sangat besar dan fungsi yang kompleks lebih baik tidak boleh menggunakan nodejs. Jika Anda ingin membangun aplikasi bersama dengan obrolan dan fungsi kolaboratif apa pun .. simpul dapat digunakan di bagian tertentu dan tetap harus pergi dengan teknologi kenyamanan Anda.
sumber
Node sangat bagus untuk prototipe cepat tetapi saya tidak akan pernah menggunakannya lagi untuk hal yang kompleks. Saya menghabiskan 20 tahun mengembangkan hubungan dengan kompiler dan saya sangat merindukannya.
Node sangat menyakitkan untuk mempertahankan kode yang belum Anda kunjungi untuk sementara waktu. Jenis info dan kompilasi deteksi kesalahan waktu adalah HAL YANG BAIK. Mengapa membuang semua itu? Untuk apa? Dan sial, ketika ada sesuatu yang pergi ke selatan tumpukan jejak cukup sering sama sekali tidak berguna.
sumber