Node.js'nin diğer sunucu tarafı çerçevelerden farkı nedir?


21

Node.js'nin çok popüler olduğunu fark ettim ve içinde küçük ölçekli projeler yapan birkaç insan örneği gördüm.

Ayrıca Node.js'nin neler yapabileceği hakkında bir fikir edinmek için artılar ve eksiler listelerine baktım, ancak PHP, Perl veya Ruby gibi diğer daha olgun sunucu tarafı teknolojilerinden nasıl farklı olduğu konusunda hala net değilim. raylar.

Özellikle, Node.js'i mevcut alternatiflerden ayıran nedir ve neden?


1
@ downvoter - neden olumsuz? İkinci paragraf dışında (neden bir başkası yaptığında bir şeyi neden başlattığını gerçekten soramazsınız çünkü her zaman daha iyisini yapabilirsin), bu soruyu merak uyandırıcı buluyorum. Bunu sık sık kendim düşündüm.
David Peterman

Alınması gereken küçük bir miktar , ancak "node.js" adlı cümle ögesine giderseniz yaklaşık 3 milyon hit alıyorsunuz.
Peter Rowell

@Peter, evet, denedim ve haklısın. Ancak 3 milyon hala iki. Bir yıl sonra tekrar gelebilirsiniz ve bu rakam muhtemelen 10 milyona çıkmıştır. :)
Saeed Neamati 09:11

3
@Mark, olağanüstü düzenleme için teşekkürler. Şimdi daha açık.
Saeed Neamati

Yanıtlar:


18

Node.js'i mevcut sunucu tarafı çerçevelerinden, asenkronize olaylardan ve bir programlama dili olarak JavaScript'in kullanımından farklı kılan iki önemli şey vardır .

Asenkron Olaylar

Varolan sunucu tarafında çerçevelerinin çoğu zaman uyumlu bir mimari kullanırken, node.js bir kullanır asenkron JavaScript iyi işleyebilir mimari,. Bu, sunucunun olaylara tepki gösterdiği ve olayları (mesajlar) örneğin veritabanına gönderdiği anlamına gelir . Bu programlama stili, senkronize bir stille çok farklıdır ve diğer dillerle kullanılması zor olabilir. Node.js, zaman uyumsuz G / Ç ile zaman uyumsuz bir stil kullanır ve iyi ölçeklenebilir.

Ayrıca bkz. Etkinlik Odaklı Mimari

JavaScript

JavaScript, web uygulamalarının istemcide kullandığı programlama dilidir. Sunucu tarafında aynı dili kullanmak, geliştiricinin JavaScript bilgisini hem istemcide hem de sunucuda uygulayabileceği ve gerektiği şekilde aynı işlevleri kullanabileceği anlamına gelir.

Sunumu , Node.js'e yönelik olay mimarisini daha ayrıntılı olarak açıkladığı Ryan Dahl ile Node.js'ye Giriş'i tavsiye ederim .


2
Bu, şu ana kadarki en iyi cevaptır, ancak ilk önce Asynchromous Events'i koyardım, çünkü Node.js'i sunucu tarafı çerçeve olarak çekici kılan şey bu. Eşzamanlı G / Ç ve ölçeklenebilirlikten bahseden iyi bir iş. Bu onun kalbi.
Adam Crossland

@ Jason, hala anlamıyorum. ASP.NET de olaya dayalıdır. O zaman Node.js ile ASP.NET arasındaki fark nedir? Sadece eşzamansız olduğu için mi? Bu durumda, ASP.NET'te çoklu iş parçacığı kullanmak aynı şeyi yapabilir, değil mi?
Saeed Neamati

3
@Saeed: ASP.NET dişli ve senkronizedir, örneğin veritabanına erişirken, konu engellenir ve veritabanından bir cevap bekler. Ve birçok iş parçacığı kullanıldığında (örneğin, her istek için bir tane) çok fazla bellek kullanılır (her iş parçacığı çok büyük miktarda belleğe ihtiyaç duyar), bu bir darboğaz olabilir. Node.js mesajları gönderir ve olaylara tepki verir, bu nedenle hiçbir zaman (umarım) diziyi engellemez. Node.js ile, istemci tarafında Ajax ( Asenkron javascript ve XML) ile aynı programlama modelini ve aynı dili kullanıyorsunuz.
Jonas

Arkasındaki büyük açık kaynak topluluğunu unuttun.
Raynos

3
C # 5 yeni asyncşeyler ile birlikte hareket ettiğinde değişebilir. Sorun, diğer dillerde ölçeklenebilir asenkron kod yazamamanız değil , iyi bir dil seviyesi desteği olmadan yapmanın (doğru) daha zor olması değil.
Davy8

6

Farklılık çünkü olay odaklı . Bu, sunucuyu oldukça ölçeklenebilir hale getirir.

Kısaca;

İplik modeli

  1. Müşteri bir şey ister
  2. Sunucu kapanıyor ve isteği işliyor
  3. Müşteriye geri verir
  4. Yeni bir istek işleme koyulmaya hazır

Etkinlik Modeli

  1. Müşteri bir şey ister
  2. Sunucu işleme isteğini iletir. Yeni bir istek işleme koyulmaya hazır
  3. Sunucu geldikleri sırada daha fazla istek işliyor
  4. İstek, işlemi tamamladığında sunucu verileri müşteriye geri verir

@ Tom, olaya dayalı derken ne demek istiyorsunuz? ASP.NET WebForms aynı zamanda olaya yöneliktir ve bunun gibi işleyicileri görebilirsinizSession_Started ya Context_Authenticatedda ya da Page_Load?
Saeed Neamati

1
Olay güdümlü olarak adlandırmak, gerekenden daha belirsizdir ve gerçekten de Node.JS: asenkron I / O'nun kalbine gelmez.
Adam Crossland

2

Bunun popülaritesinin JavaScript kullanımından kaynaklandığı izlenimini edindim. Birçok web geliştiricisi JavaScript'i bildiği için, şimdi aynı dili kullanarak sunucu tarafı kodu geliştirebilecekleri bir satış noktasıdır. Bunun düşünebileceğim birkaç avantajı var:

  • Kod dosyaları sunucu ve istemci arasında paylaşılabilir ve böylece sistemin yalnızca iki tarafını ele alma çabasının yinelenmesini önler.
  • Geliştiricilerin zihinsel olarak diller arasında geçiş yapmasına gerek yoktur. (bence çok önemli değil)
  • Bir web çözümü tasarlarken, mimarların birden fazla dil seçmesine gerek yoktur.
  • Sunucu tarafı kodu hiç geliştirmemiş biri artık farklı bir dil öğrenmeden bunu yapabilir. (Değerli bir tartışma olması muhtemel değildir, IMHO)

Node.JS popülerdir çünkü hızlıdır ve iyi ölçeklenir. JavaScript’te olması güzel ama büyük ölçüde tesadüfi.
Adam Crossland

2
Daha önemlisi, sunucu tarafı geliştiricilerinin istemci tarafı kodunu aynı dilde yazabilmesi ve sunucu tarafı modüllerini istemciyle paylaşabilmenizdir. Diğer yoldan değil. Hacked client-side kodunu sunucuya taşımak istemem, bu da kendinizi ayağınıza çeker.
Raynos

@Adam: Node.js neden "hızlı ve iyi ölçeklenir" açıklamasına uyan teknolojiler varken popüler hale geliyor? - Çünkü bu JavaScript.
John Fisher

Bu yazma uygulamalarına daha zordur @John o yok Node.js. doğru ölçeklendirme Uygulamanız CPU yoğunluğundan daha yoğun olan disk / ağ ise (çoğu), çok zor bir iş parçacığı kodu yazmadığınız sürece, tek bir çekirdekte diğer sunuculardan çok daha fazla eşzamanlı bağlantıyı kolayca destekleyebilirsiniz.
Davy 8

@ Davy8: Sanırım bunların hepsi kullandığınız diğer çerçevelere / sistemlere bağlı. Tanımladığınız ölçeklenebilirlik kolaylığı, kullandığım araçlarla zaten çok basit. Benim bakış açımdan Node.js'in sunduğu tek şey, JavaScript zevki olan zorlayıcı değil.
John Fisher
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.