Gerçek zamanlı olmayan web uygulamaları için node.js kullanmaktan kaçınmak için iyi bir neden var mı?


29

Node.js'nin gerçek zamanlı web uygulamaları için ne kadar harika olduğu hakkında çok fazla konuşma gördüm - soket, Comet, AJAX-yoğun iletişim vb. Olay odaklı, asenkron, iş parçacıklı sürüş modelinin düşük ek yük ile eşzamanlılık için de iyi olduğunu biliyorum.

Ayrıca, daha basit, 'geleneksel', gerçek zamanlı olmayan uygulamalar için Node.js eğitimlerini de gördüm (örneğin, uygulama geliştirmeyi öğrenen insanlar için standart 'Merhaba Dünya' gibi görünen standart blog örneği). Ayrıca düğüm statik'in statik varlıklar sunmanıza izin verdiğini de biliyorum.

Sorum şu: ilanlar, forumlar, yukarıda belirtilen blog örneği veya dahili işletme uygulamaları için oluşturduğunuz CRUD uygulamaları türü gibi geleneksel web uygulamaları için Node.js'den kaçınmak için herhangi bir neden var mı? Sırf tüm tuhaf gerçek zamanlı işlerde üstün olduğu için, bu daha sabit kullanımlar için kontrendike mi oluyor?

Düşünebildiğim tek şey, yarasa dışında, olgun kütüphanelerin olmayışı (ki bu değişiyor olsa da).

(Soruyorum sebebi değil, aynı zamanda ben doğrulama kodunu ve etajer yeniden böylece, node.js için PHP ditching düşünüyorum çoğunlukla dil arasında geçiş empedans uyumsuzluğu üzerinden almak olmasıdır. Benim süperego beni admonishes seçim iş için en iyi araç , ancak onbeş dil öğrenmek için çok fazla zamanım yok ve tüm kullanıcı kütüphanelerini kapsamlı bir cephaneye sahip olmak için çok fazla zamanım yok.Node.js'nin bana PHP'den daha kolay bir optimizasyon yolu verebileceğine dair güven verici. Gelecekte Apache yoğun trafik hakkında düşünmeye başladığımda.)

[EDIT] Şimdiye kadarki cevaplar için teşekkürler millet; Cevap seçmeden önce başka birinin tartıştığını görmek istiyorum. @Raynos türünün cevabı ne düşündüğümü doğrular ve yorum yapanların bağlantıları düşünce için iyi bir yemek sunar, ancak 'SORUN İÇİN NODE KULLANMAYIN' gibi, başka herhangi bir Düğüme özgü cevapları olup olmadığını görmek istiyorum. '. (Yüksek CPU görevlerinin yanı sıra, biliyorum zaten :-)


1
@ default.kramer: Bağlantı için teşekkürler, gerçekten çok memnun oldum!
Zach

1
Vaov! Oldukça görüşülen adam, ha? Takip eden makalede, yüksek G / Ç ve düşük CPU uygulamaları için olaylı ve dişli sistemlerin kabaca eşit olduğunu ve sorunun ne zaman olacağını bilmeyen acemi programcılara bağlı olduğunu söylüyor gibi görünüyor. olaylardan vazgeç ve yeni bir konu başlat. Ancak programcının cehaleti, aracın kötü olduğu anlamına gelmez, değil mi? Forte CPU yoğun işler için olay döngüleri olan bir ortam kullanmanın biraz garip olduğunu kabul ediyorum, ama kötü mü?
Paul d'Aoust

1
JavaScript'e olan nefreti de önemli bir sorun gibi görünmekte ve tartışmasının ardındaki enerjiden kısmen sorumlu olabileceğinden korkuyorum.
Paul d'Aoust

@ Paul - Büyük olasılıkla bir tuz tuzu ile almalısınız. Node.js hakkında fazla bir şey bilmiyorum; Sadece komik olduğunu düşündüm. (yazısının çoğunda olduğu gibi)
default.kramer

@ default.kramer hatırlatma için teşekkürler; İnsanların görüşlerini İncil olarak kabul ediyorum. Başlıca geçerli eleştirisi, CPU yoğun görevler için Node.js kullanmamanız gerektiği görünüyor. İşçi süreçleriyle ilgili eleştirisi konusunda kafam karıştı; Özel görevler için ayrı çalışanlar yaratmada büyük bir problem var mı?
Paul d'Aoust

Yanıtlar:


13

geleneksel web uygulamaları için Node.js'i önlemek için iyi bir neden var mı?

Evet, web platformunda N yılınız varsa, açıkça X platformunda bir uygulamayı daha hızlı geliştirebilirsiniz.

Eğer Y yapmak istiyorsanız ve platform X'de X'i yapan önceden hazırlanmış bir Y çözümü var.

Neden bir platform diğerinde kullanmanız gerektiğine dair tüm genel sebepler.

dahili iş uygulamaları için oluşturduğunuz CRUD uygulamalarının türü?

Evet, daha hızlı bir jenerik uygulama yazmanıza izin veren başka bir platform var, raylarda yakut akla geliyor.

Ancak, dedi. Düğümle ilgili deneyimim var ve benim için kutunun dışında çok fazla özellik bulunmadığı sürece, düğüm üzerinden başka bir platform seçeceğimi iddia edemem.

Temelde basit bir soru

Tüm bunları benim için yapan bir araç var mı? Hayır, sonra aracı yazmak için en uygun platformu seçin.

Node.js'nin uygunsuz bir platform olmasının kesin bir nedeni yoktur ("javascript'ten nefret ediyorum" dışında)


Yani, aşinalık, kütüphanelerin mevcudiyeti, vb. Gibi pragmatik ilkelerin belirli bir platform için güçlü argümanlar olduğunu düşünüyorsunuz, ha? Bunlar güzel düşünceler ve kesinlikle düşündüğüm şeyler. (Kullanıma hazır çözümler için savunuculuk yapmanıza şaşırdım; kendi
tarzınızı yuvarladığınızı

@ Pauld'Aoust Ben kendi başınıza bir tür adamım. Ancak hiçbir şey yapmadım ve son teslim tarihim yok.
Raynos

ihmal için teşekkürler. Node.js sohbetindeki diğer kişilerin model kitaplıklarını (Backbone.js, vb.) Kullanma ve Backbone.js'yi öğrenmek için çok fazla zaman harcadığımı ve yalnızca JavaScript'ten yararlanmak (ve öğrenmek) için yeterli zaman olmadığını bilmekle ilgili yorumlarınızı hatırlıyorum. prototipik miras mekanizması. İyi tavsiye; Şimdi çok daha rahat hissediyorum.
Paul d'Aoust

4
-1 belirsiz. 1) Sadece N'de X yıllık bir deneyime sahip olduğunuzdan - Node'dan kaçınmanız gerektiği anlamına gelmez. Tecrübeye dayalı bilinçli cehalet mi öneriyorsun? Ve "Genel sebepler" nedir? 2) 'genel bir uygulamayı daha hızlı yazmanıza izin veren diğer uygulamalar' - tamamen özneldir. 3) '*' * dışında * * Nefret ediyorum * JavaScript '- ayrıca gelişen bir teknolojiden kaçınmak için öznel ve geçerli bir neden değildir. * Yazım.
Jack Stone

@ClintNash bazı nedenlerden ondan farklı değil. "İnsan Kaynakları" vs "N yıllık tecrübesi" de aynıdır. "DüğümJS, Geleneksel Çerçeveler kadar olgun değil" vs "Evet, genel bir uygulama daha hızlı yazmanıza izin veren başka bir platform var, raylar üzerinde yakut akla geliyor." Aynı zamanda aynı. Sadece onlar aynı değil, ama seninki ondan daha ölçülebilir (objektif) değil.
aaaaaa

6

Düğümle birkaç hafta çalıştıktan sonra evet derim, çok havalı. Ancak, değirmencilik web uygulamalarınızı değiştirmek için kullanmak isteyeceğiniz bir şey olması gerekmez ... ya da imo olması gerektiği gibi değildir.

Unutmayın, düğüm kendi sunucusudur. Yalnızca bir node.js uygulamanızdan daha fazlasını çalıştırmak istiyorsanız, bu karmaşıklığı ortaya çıkarır. yani, bir makinede barındırılan birden fazla site / etki alanı varsa. Aynı sunucudan çalışan yarım düzine farklı alan için bir düzine PHP uygulamasına sahip olabileceğiniz bir LAMP yığını gibi değil (en azından 80 numaralı bağlantı noktasında). Düğüm için büyük olasılıkla mümkün kılan çerçeveler vardır, ancak geleneksel web platformlarına takılırsanız ihtiyaç duymadığınız karmaşıklığı da eklersiniz. (Tabii ki, ayrıca bir web sunucusunu düğümün önüne koyarak proxy'ler de kurabilirsiniz, ancak bu tür düğüm kullanmanın faydasını yitirir).

imo, Node geleneksel bir web sunucusu ile birlikte çalışmak için idealdir . Şimdi düzenlenmiş şeylere sahip olmamın yolu, apache üzerinden statik html / js / resimlerini sunmak ve düğüm uygulamasına uzun süre başvurarak 'gerçek zamanlı' veri ihtiyaçlarını karşılamaktır.


Birden fazla ana bilgisayarı kurmak için +1 kullanım kolaylığı kesinlikle dikkate değer.
Paul d'Aoust,

Düğüm uygulamalarını Apache httpd veya nginx sunucusunun arkasına koymak ve bu uygulamanın URI imzasıyla istekleri düğüm bağlantı noktasına (veya bağlantı noktalarına) yönlendirmek oldukça kolaydır.
TomG

+1 - node.js'nin sunucu tarafı proxy olarak ('geleneksel web sunucusu ile birlikte') olduğu fikri, bu yılın başlarında çekişme kazandı ve dikkate değer - özellikle de yönetmeniz için geleneksel bir mimariye sahipseniz. İşletme için anlamlı görünen bir tasarım desenidir. Ancak, kayda değer - bu AVOID Node.js için bir neden değil, belirli bir amaç için kullanmak için bir neden.
Jack Stone,

4
-1 - Düğümün önüne proxy (nginx gibi) koymak mükemmel bir kullanım durumudur ve aslında bazı durumlarda bir taneye sahip olmamaktan çok daha güvenli ve performanslıdır. Düğümün hiçbir yararını yok etmez. Düğüm uygulamalarımı unix alan soketlerinde çalıştırma eğilimindeyim, ve sonra nginx ağ geçidi görevlisi olarak davranıyor.
Scott Anderson,

3

Düğümle ilgili saniyeler düşünmek için iyi bir neden teknik değildir - ne yaptığıyla ilgili harika ve şaşırtıcı.

İş dünyası ve özellikle insan sermayesi, yani bunu bilen programcılar, ne kadara mal oldukları ve bulunabilirliği Öğrenmesi o kadar zor değil, ama yeni bir teknolojide olduğu gibi, onu iyi tanıyan (veya bunu isteyen) insan sayısı, daha büyük işçi havuzlarının bir altköküdür.


Bu nedenle, daha geleneksel uygulama yığınlarının yerine Düğüm kullanmaya karşı pek bir şey olmadığını düşünüyorsunuz; sorunlar gerçek dünyadaki endişelerle daha mı fazla?
Paul d'Aoust,

+1. İnsan Kaynakları - ve bazılarının JavaScript öğrenme isteksizliği - uygunsuz bir gerçek. Bu cevap iyi ifade ediyor. Ancak, "insanlar JavaScript'i Nefret Ettiği için" Düğümünden Kaçınmak da mantıklı bir ilerleme değildir. Her yenilikten kaçınırsak, başka birinin nefret ettiği teknik olarak nerede oluruz? Hiçbir yerde. Düğümdeki zorluk A) Yeni yetenekler edinmek veya B) Geleneksel yetenekleri yeni yetenekler konusunda eğitmek. Bu noktaya kadar - John Resig’in Han Akademisi’nin kurulmasında öngörüldüğünden beri her yerde JavaScript kodlu okullar açılır. Kısacası, bu işlerin yoludur. +1. İyi ifade edildi.
Jack Stone,

3

Bu, sanat durumunu ilerletmek için de sormamız gereken çok iyi bir sorudur.

Node.JS'nin sınırlarının nerede olduğunu bilmek çok merak ettim (Paul d'Aoust gibi). Ne yazık ki, birçok cevap öznel yanlılığın TAMI ve geçici olarak ilgili mantığa sahiptir.

Kendime sordum: HEDEF KONUŞUYLA BİRLİKTE FİLTRE VE BU İLGİLİ SORUya CEVAP VERMEK İÇİN AŞAĞIDA GİDER Mİ?

Kalan noktalar şöyle görünüyor:

1. DüğümJS Geleneksel Çerçeveler kadar olgun değildir. Paul d'Aoust’un önerdiği gibi, bu tam olarak kaçınmak için değil, geçici inceleme ve durum tespiti için geçici bir sebep. Ödevimizi web uzmanları olarak yapmak beklenir ve teknolojinin kuruma, onların ihtiyaçlarına, geleceklerine, takıma (bize değil) en uygun olanı belirlemek bizim işimizdir. Vade netlik için bir ihtiyaç ve risk için iştah için bir karardır, fakat kaçınmamaktır.

2. Proxy Sunucusu Olarak NodeJS. Akıllıca bir öneri, tartışma öncesi, incelemeye ve değerlendirmeye değer bir şey. Düğümün bir ön uç arayüz proxy tasarım deseni olarak mevcut teknolojilerle bağlantılı olarak kullanılması kavramıdır. Fakat aynı zamanda, düğümü kullanarak AVOID'in bir nedeni değil, bunun yerine tam yerini almaktan kaçınmak için bir nedendir. Bunun yerine bir eş yaklaşım yaklaşımı tercih ediyor.

3. Hata Ayıklama Düğümü. Joyent'teki çekirdek Düğüm geliştiricileriyle yapılan görüşmelerde hata ayıklanabilirliği çevreleyen ve çekirdekten kaynaklanan sorunların kök nedenini geriye doğru takip eden çok fazla karmaşıklık var (tek diş açma ve geçmiş iş parçacıklarını görememe temelinde). Bu dikkate almaya ve değerlendirmeye değer - ancak (tekrar) büyük olasılıkla zarfı zorlayabilecek kenarlı durumlar için genel kullanımdan kaçınılmaz. Belki sizin özel ihtiyaçlarınız bu kategoriye girer ve belki onlar olmaz.

4. İnsan Kaynakları. Bu sayfadaki JS'yi kullanmaktan AVOID'in en iyi sebebi budur ve alçakgönüllü görüşüme göre bu kesin ve uygunsuz bir gerçektir. Asıl soru şu: Şirketiniz projeyi tüm yaşam döngüsü boyunca görebilecek yetenekli profesyonellere sahip mi? Değilse, NodeJS'den kaçınmanız gereken hiçbir soru yoktur. Veya bunun yerine A) doğru yeteneği bulmak, veya B) Mevcut yeteneği geliştirmek.

Şikayetler: JavaScript hakkındaki şikayetler hakkındaki gözlemim, birçoğunun Kullanıcı Hatası'ndan, dilin tutarlı bir şekilde başarısız olmasından daha fazla kaynaklandığıdır. "The Nefret JavaScript Diatribe" a karşı birçok hakaretten deşifre ettik ve çok daha fazla borçlandırmaya devam edeceğiz. Gibi sorunlar - belgeler yeterince iyi değil, yeterince seksi değil, ama insanlar bundan hoşlanmıyor, kanser, şeytan ya da çok "yazım hatası" (-CRichardson), öznel ve Doğru kurumsal karar alma için çıkarılması gereken önyargılı şikayetler.

Sonunda, doğru cevap olabilir - AVOID NodeJS için iyi bir neden yoktur . Belki de bu yüzden hızlı bir büyüme, evlat edinme ve katkı yapıyor. Ancak, hepimiz için belki de buradaki cevap, NodeJS'yi daha iyi değerlendirmeye, araştırmaya ve anlamaya devam etmek - ve somut isteksizliklere bakmaktır. Node.JS'nin nerede olgunlaşmamış olduğunu tam olarak anlamaya açık olmak için - onu daha iyi hale getirmek için tam olarak nerede ihtiyacımız olduğunu buluruz. Ve bu bir nimettir.

İyi soru. Birisi, NodeJS'den kaçınmak için daha iyi bir sebep bulmaya çalışan birini merak ediyor.


-1

Gerçek zamanlı olmayan uygulamalar için X düğümü kullanmanın bir yararı var mı:

  • Ölçeklendirme : Düğüm iyi performansa sahip ancak diğer platformlar da var; PHP, Ruby, Python ve Java her ölçekte. BÜYÜK isimleri milyonlarca kullanıcıyla birlikte bulabilirsiniz.
  • Ön uç ve arka uç için bir dil : Bu bir şaka, tıpkı Java'nın "Bir kez her yerde yaz" gibi
  • Sıcak ve seksi : Tek geçerli nokta. Ancak hiç kimse web sitenizin sinirli teknolojiyi kullanmasını umursamıyor!

Gerçek zamanlı olmayan uygulamalar için Node over X kullanmanın avantajı:

  • En İyi Uygulama : Düğüm yeni olduğu için, özellikle CRUD web uygulamaları için, diğer platformlardan daha az en iyi uygulamalara sahiptir.
  • Javascript Dili : İnsanlar Javascript'i sevmiyor. Node.js sıcakken, Javascript değildir. Bu yüzden insanlar istemci tarafı için bile Javascript yazmaktan kaçınmak için Coffeescript'i yarattı.
  • Gelişme Hızı : Rails ve Django dahil ancak bunlarla sınırlı olmamak üzere eski ve sıkıcı çerçeveler, CRUD web siteleri için uzun yıllar boyunca iyi test edilmiş ve geliştirilmiştir. Düğümde benzer uygulamaları uygulayabilseniz de, büyükbabanız çerçevesinde yapmanız çok daha kolay.
  • Kararlılık : Düğümün web çerçeveleri daha hızlı bir şekilde daha iyi hale geliyor. Değişiyorlar ve yakın gelecekte daha fazla API uyumsuzluğuna sahip olacaklar.
  • Kütüphaneler ve araçlar : Daha fazla kullanıcılı eski teknolojilerin daha fazla kütüphanesi ve aracı vardır.

Cevabım kesinlikle 2015 yılında geçerli olmayacak. 2014 yılında, gerçek zamanlı olmayan web uygulamaları için Düğüm atla, ancak bir göz atın.

Her web çerçevesinin güçlü bir noktası vardır. Bu nokta için kullanırken mutlu olacaksınız. Gerçek zamanlı olmayan web uygulamaları, Düğüm'ün web çerçeveleri için güçlü bir nokta değildir.


2
-1. Bu cevabın 2015 yılında geçerli olmayacağı konusunda hemfikirim. Ancak bu aynı zamanda aşırı oylama için de geçerlidir. Yukarıdaki 8 madde işaretini geçersiz kılar - yalnızca geçici olarak alakalı olduklarını görebilirsek. 1) Ölçeklendirme - Walmart Mobile, Düğümden kaçınmak için bir neden değil. 2) İzomorfik JS şaka değildir. Sebep değil. 3) Sunucu Cinsiyeti? Çoğu kullanıcı sadece ux bilir. 4) En iyi uygulama özneldir, 5) Sıcak değil mi? -sözel 6) Daha kolay mı? -öznel. 7) Kararlılık geçici olarak ilgili bir noktadır. 8) NPM'nin 2014 yılında Maven'i geçmesi bekleniyor. Downvote.
Jack Stone,

-1

Node.js çok popüler bir platformdur ve çok sayıda ilginç özelliği vardır, falan filan, ama bir aracın kullanımı kişisel bir tercihtir. Node.js'ye dört kez verdim ve bundan memnun değildim. İşte nedenlerim. Lütfen bu nedenlerden bazılarının eski olduğunu veya sadece kişisel olduğunu unutmayın: P

  • Farklı dil / sözdizimi tercih ettim (Python, Scala'yı seviyorum, en sevdiğim dil Prolog yani evet).
  • Kullandığım çerçeveler ve kütüphaneler için dokümantasyon kalitesi Java, Scala, Python kütüphaneleri için iyi değil.
  • Düğüm tasarımcıları, olay modeli, gözlemci veya gelecek işlemleri yerine geri aramalara oldukça takıntılıdır.
  • 2005'te geri geliştirilen Ruby, Python, Java'da yapmak istediklerim için hazır çözümler var, sadece config dosyasını düzenlemeliyim.

2
-1 - Öznel noktalar. "Tercih Edilen Sözdizimi", "Belgeler o kadar iyi değil", "Obsesif Geri Çağrıları" ve "Zaten benim dilimde Tamamlandı" - hepsi belirsiz ve özneldir. Bunları daha önce duymuştuk. Borçlular. Burada Node.JS önlemek için bir neden yok. Downvote.
Jack Stone,

1
Tüm hususlar açıkça belirttiğim kişisel tercihim. Ayrıca, kişisel tercihten nasıl hata yaparsınız?
David Sergey

-9

HTTP durumsuzdur, dolayısıyla gerçek zamanlı olmayan bir web uygulaması gibi bir şey yoktur ve bu nedenle her şey için düğümü kullanamamanız için hiçbir neden yoktur.

Bununla birlikte, düğüm belirli bir uygulama mimarisi türü için daha uygundur. PHP biraz kod içeren html dosyalarıdır. Düğüm isteğe bağlı olarak bir miktar html içeren koddur.

Bu, uygulamanızın herhangi bir istemci tarafı komut dosyası olmadan standart html formları olması durumunda PHP'nin daha kolay olacağı anlamına gelir. Düğüm şablonlama araçlarına sahiptir, ancak açıkçası PHP gibi olgun bir şey değildir.

Çok sayıda istemci tarafı komut dosyanız varsa ve verileri ajax ile kaydederseniz, sunucuda statik bir html istemcisi çağırma işlevine sahip olursunuz. Bu tam olarak düğümün iyi olduğu şeydir. CRUD uygulamalarının genellikle inşa edilme şekli olmasa da, doğru çerçeveyle oldukça hoş bir şey üretebilirsiniz.


HTTP'nin vatansız ve gerçek zamanlı olduğu hakkında alınan nokta; Bununla birlikte, gerçek zamanın tipik tanımıyla ilgili pragmatik kaygılarla daha fazla ilgileniyorum: yüksek hacimli ve düşük talepler. Bazen JSON'un üç veya dört satırını atmak için yeni bir PHP örneği döndürmek biraz fazla zor görünüyor. Doğru muyum, yoksa sadece papağan sendromundan mı acı çekiyorum?
Paul d'Aoust

Eğer PHP'yi yüklemiyorsanız, javascript'i yüklüyorsunuz ve çeşitli önbellekleme türleri var, bu nedenle fark endişelenmeniz için yeterli olmayacak. En büyük fark, kodlama tarzında ve bu nedenle de sürdürülebilirliktedir - her iki platform da HTML veya JSON çıktısı verebilir, ancak PHP, statik html dosyalarını düzenlemek için kullanılan insanlar için, düğüm ise modern javascript programlaması için kullanılan insanlar için tasarlanmıştır.
Tom Clarkson

Bir süre tercüman yüklemek zorunda olduğumu biliyorum, ancak tercümanların çevirmek yerine, Node.js'deki gibi (her zaman düşük CPU uygulamaları için) çalışan tercümanlardan birinin bir örneğine sahip olmanın bir faydası görüyorum. PHP'de olduğu gibi her istekle derhal sonlandırın.
Paul d'Aoust

Evet ve son zamanlarda bu alanda rekabet miktarı göz önüne alındığında, js'den bireysel bir talep seviyesinde daha iyi performans göstermesini bekliyorum. Bununla birlikte, bunun farkın nispeten küçük bir parçası olduğunu düşünüyorum - Düğümle doğrudan kontrole ve tam olarak talebe hizmet etmek için gereken kod miktarına sahipken, sayfalara hizmet verdiğinizi varsayan herhangi bir şablona dayalı sistemde gereksiz ek yük ve karmaşıklık katacak diğer senaryolar.
Tom Clarkson
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.