Javascript neden Java, C ++ gibi diğer diller yerine MongoDB ve CouchDB'de kullanılıyor?


19

SO bu soruyu sordum ama burada denemek için önerildi. İşte böyle:

Şimdiye kadar Javascript anlayışım, olayları yakalayan ve bir web sayfasını dinamik yapan istemci tarafı bir dil olmasıydı.

Ancak MongoDB ve CouchDB arasındaki karşılaştırmayı okurken her ikisinin de Javascript kullandığını fark ettim. Bu, diğer geleneksel dillere göre JavaScript seçiminin nedenini merak etmemi sağlıyor.

Sanırım JavaScript'in rolünü ve diğer dillere göre avantajlarını anlamaya çalışıyorum.

Güncelleme: İki veritabanının desteklediği diller / sürücüler sormuyorum. Karşılaştırma şöyle diyor:

Hem CouchDB hem de MongoDB Javascript kullanır. CouchDB, Javascript'i görünümlerin oluşturulması dahil olmak üzere yaygın olarak kullanır .

MongoDB ayrıca sunucu tarafında rasgele javascript işlevlerinin çalışmasını destekler ve harita / azaltma işlemleri için javascript kullanır.

Anlayış eksikliğim Javascript'in arka uç çalışması için neden kullanıldığına bağlı. CouchDB'de görünüm oluşturmak veya harita / küçültme işlemlerini kullanmak için neden tercih edilir? C / C ++ veya Java neden kullanılmadı? Bu tür arka uç işler için Javascript kullanmanın avantajları nelerdir?


3
Javascript yalnızca bir tarayıcı komut dosyası dili değildir. Birkaç başka uygulama Javascript veya benzer bir dili gömmektedir (örneğin, bir dizi Adobe uygulamasını komut dosyası oluşturmak için Javascript ile birlikte Flash'ta ActionScript). Emin değilim, ama Javascript asla sadece web tarayıcılarına yerleştirilmek üzere tasarlanmamıştı . Öyleyse ... neden bir arka uç veritabanı uygulamasına yerleştirmiyorsunuz?
Steve314

Tarayıcıda çalışan JS'yi gördüğüm / okuduğumdan beri, tarayıcı açmadan sunucu tarafında nasıl çalıştığını merak ediyorum?
jeff musk

1
Teşekkürler. Haklısın. Sunucu tarafı JS parçası yapmak için SpiderMonkey derleyicisini kullanıyorlar. en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) @Raynos buna dikkat çekti.
jeff musk

6
Bunun için V8 ve SpiderMonkey gibi bir javascript motoruna ihtiyacınız olacak . Tarayıcı dışında Javascript için birkaç kullanım alanı vardır, wikipedia uzun bir listeye sahiptir .
yannis

Hmmm - önceki yorumum bir genelleme olarak doğrudur, ancak benim için daha spesifik olmaya çalışmak tehlikeli olabilir - MongoDB veya CouchDB hakkında hiçbir şey bilmiyorum. Bir arka uç veritabanı uygulaması neden olmasa da. bir sunucu kendi tarayıcı bağımsız Javascript tercümanı olamaz, ben bu şekilde ele olup olmadığını bilmiyorum ve aşağıdaki cevaplar muhtemelen olmadığını göstermektedir.
Steve314

Yanıtlar:


15

Mobil kod ve Çapraz platform

JavaScript mobil kod olarak adlandırılır , kod sunucudan (bu durumda MongoDB ve CouchDB) istemciye (web tarayıcısı) aktarılır ve kurulum işlemi olmadan istemcide yürütülür.

JavaScript çalışma zamanı ortamları (web tarayıcıları) birçok platformda yaygın olarak bulunur. Bu JavaScript'i platformlar arası iyi bir dil haline getirir .

JavaScript birincil arka uç dili olarak kullanılmıyor

MongoDB arka ucu C ++ ile, CouchDB ise Erlang ile uygulanır. Dolayısıyla JavaScript, bu sistemler için arka uç için birincil dil olarak kullanılmaz.

Gönderen mongodb.com :

C ++ ile yazıldı

Gönderen couchdb.apache.com :

CouchDB, eşzamanlı dağıtılmış sistemler oluşturmak için ideal olan sağlam bir işlevsel programlama dili olan Erlang'da yazılmıştır. Erlang, kolayca ölçeklenebilen ve kolayca genişletilebilen esnek bir tasarıma izin verir.


1
Cevabınız için teşekkürler. "CouchDB, Javascript'i görünümlerin inşası da dahil olmak üzere yaygın olarak kullanıyor" Peki, istemci neden bir görünüm oluşturmak gibi arka uç işlerin tarayıcısıdır? Böyle bir görev için neden bir tarayıcı resme geliyor?
jeff musk

@ startup007: Cevabımın ilk bölümüne bakın. Web tarayıcıları bugün çoğu sistemde zaten yüklüdür (örn. Mac OS X, Windows, Linux, iPhone, Android), bu nedenle web tarayıcıları JavaScript (mobil kod) çalıştırabildiğinden kullanıcının herhangi bir şey yüklemesine gerek yoktur.
Jonas

Hemen alamadığım için özür dilerim. Açıklayayım. Peki bu veritabanları görevin bir kısmını yapmak için sunucu tarafında tarayıcılar açıyor ve sonra JSON çıktısını döndürüyor mu?
jeff musk

1
Teşekkürler Raynos! wiki spidermonkey diyor- "MongoDB, başka bir NoSQL veritabanı sistemi sunucu tarafı JavaScript yürütme için SpiderMonkey kullanır." en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) . hmm ilginç
jeff musk

4
yanlış, ne MongoDB ne de CouchdB tarayıcıyı istemci olarak kullanmaz. veritabanı istemcisi, uygulamanın (genellikle bir webapp, ancak her türlü uygulama olabilir) veritabanında depolanan verileri yönetmek için kullandığı bir kütüphanedir. Resimde tarayıcı yok. JavaScript bir veri tanımlama dili (JSON'un bir üst kümesi) olarak ve ayrıca mağaza prosedürü dili olarak kullanılır, istemcide değil, kesinlikle hiçbir tarayıcıda veritabanı motorunda yürütülür.
Javier

7

Çünkü JavaScript bir betik dilidir.

İnsanlara tanıdık gelen esnek ve dinamik bir dildir.

JavaScript'in kullanılmasının diğer nedeni, bu veritabanlarının kullandığı JSON biçimiyle iyi hizalanmış olmasıdır.

Ve son olarak bu veritabanlarının yorumlanabilecek bir dile ihtiyacı var. Çünkü bu sorguların kodu ağ üzerinden gönderilir.

Yani bir

  • dinamik
  • esnek
  • tanıdık
  • yorumlanır

dil. JavaScript'in burada kötü bir seçim olduğunu düşünmüyorum. Muhtemelen C stili sözdizimine sahip olmak için seçilmiştir.

JavaScript'in neden başka bir komut dosyası dili üzerinde seçildiği iyi bir soru.


2
Now why JavaScript was chosen over another scripting language: Bunun JavaScript'in en yaygın kullanılan kodlama dili olduğu, tarayıcılarda kullanımı ile son derece iyi test edildiği ve oldukça iyi bir açık kaynak yorumlayıcı uygulaması olduğu için tahmin edebilirim. CouchDB uneval(), tercümanlarını SpiderMonkey'in üzerine inşa ettiklerinin bir ipucunu kullanıyor .
yannis

Microsoft, yıllarca müşteri tarafında VBscript'i destekledi, ancak şükür ki bu hiç gitmedi ...
Mark K Cowan

6

JS'nin yazmak için kullanıldığını fark ettiğimizde hepimiz mütevazı pasta yemeliyiz:

  • Veritabanları

  • Sunucular

  • İşletim sistemi

  • ve sayısız kütüphane, çerçeve, görüntü oluşturma motoru ve derleme dili,

... çünkü daha iyi.

Cidden, lütfen ... beni dinle. Elçiye zeval olmaz.

Microsoft'a neden birinci sınıf vatandaş olarak Windows 8 ile JS oluşturduklarını sorun. Veya Mozilla'nın yeni mobil işletim sistemi veya IBM'in Rivertrail, PhoneGap, ExtJS veya WebGL'si.

Uzmanlar uygulamada daha iyi bir şey bulamazlarsa bu şirketler veya projelerden herhangi biri başarılı olur mu?

Cevap ... Öyle. Yaptık. Yani buradaki tema açık olmalı: daha iyi bir yol var.

Ancak, daha iyi özneldir: bu yüzden detaya inip karşılaştırmalıyız. Ne daha iyi?

AJAX ile başladı ... ve durmadı.

  1. Engellemeyen ES. Bu gerçekten büyük bir anlaşma ve bilmeye değer. JS'de bu geri arama modelidir. Görünüşe göre, geri aramaların kullanılması engellenmeyen bir sunucuyu etkinleştirebilir: Node.js ~ yaklaşık 8 satır kod. setTimeout () bir geri aramadır. Tek iş parçacıklı asenkron işleme.

  2. Esneklik. Ne? -Java ve C sınıflara ve arayüzlere sahiptir, ancak nesne yönelimli olarak adlandırılırlar. JavaScript'in yalnızca nesneleri vardır. Ama buna ... başka bir şey deniyor.

    -Sadece nesneler tutmak esneklik için iyi bir şeydir, çünkü üyeler ve yöntemler çalışma zamanında tamamen dinamiktir. -Prototypal kalıtım korkutucu değildir. Bazı uzmanlar bunu bir nesne paketi olarak tanımlamaktadır. -JS hatalara dosttur. -Kod, çok fazla çaba sarf etmeden veya ... 'arayüzler', 'soyutlama', 'kalıtım', 'kapsülleme', 'polimorfizm' bilgisi olmadan Kompozit Bileşenlerle sonuçlanacak şekilde karışabilir. İyi şeyler, ama Nike gibi, JS'de; sadece yap.

  3. Veri Tercüme. JSON ile nesneler önden arkaya, arkadan öne aktarılabilir. XML veri çevirisi yok. JSON açıkça basittir.

  4. Düşük öğrenme eğrisi. Son derece karmaşık bir kodu kesmek ve yapıştırmak, ardından varlığa adım adım ayıklamak mümkündür. Bir meslektaşım duyuyorum. Ama bu sadece soylular için değil.

-Bu Hızlı Prototipleme için gerçekten güzel bir özellik olduğu ortaya çıktı. Ve siteler, bu tarayıcıda tasarım ve daha geniş bir şekilde kaldırarak her yerde ortaya çıkıyor; Çalışma zamanı-prototip. Checkout JSFiddle ve CodePen, ayrıca MicroJS. GitHub.

Like Transformers, with JS, there is more than meets the eye.  

It is a big deal.

GÜNCELLEME: bu yazı JavaScript artık diğer diller tarafından yaygın olarak kullanıldığından.

In Java - check out Nashorn.
In C++ - check out Emscripten, or ASM.
And there are many more.

The big surprise since the original writing of this answer was JS cross-compilation.

It turns out that many languages can be compiled to JS.

And the community is encouraging that... CoffeeScript, Dart, etc.    

This is not my specific area of expertise, but it is going on in big ways.

Simply put, we just don't know how the dynamism of JS is going to hash out yet. 

Python bunların hepsini de yapabilir
Jonathan

@JonathanLeaders - hepsi? :)
Jack Stone

1
@ jonathan-liderleri Python bir web tarayıcısında çalışabilir mi?
Aaron C

1
  • Daha fazlasıyla daha az şey yapabilirsiniz - Bu konuda birkaç okul var. Ayrıntı okulu, her salakın anlayabileceği her şeyin çok ince ayrıntılarla anlatılmasını istiyor. JS, daha ince detayların nasıl çalıştığını anlamadan önce büyük resmi elde etmenin daha kolay olması için karmaşıklığı katmanlaştırabileceğiniz karşı okulun bir üyesidir. JS'de bir arayüze yazmak çoğu dilde, IMO'dan çok daha kolaydır.

  • Birinci sınıf fonksiyonlar, kapaklar, prototip kalıtım - Gerçekten, gerçekten esnek bir kombinasyon. İstersek dersleri taklit edebiliriz. Ancak bu, JS'yi gerçekten iyi anlayanlar tarafından biraz anlamsız bir çaba olarak görülüyor. Kompozisyon, zincirleme kalıtımdan çok daha iyi JS'ye uygundur.

  • Engelleme daha yüksek bir seviyede yararlıdır. Evet, beni duydun. İşgücü yerine JS'ye odak noktası olarak odaklanmanıza yardımcı olur ve işlev çağrıları arasında eşzamansız davranıştan kesintilere izin verirken hemen hemen kuyruğu işler.

  • Öğrenme eğrisinin aslında güçlü JS yazmak için biraz dik olduğunu söyleyebilirim, ancak bir kez orada olduğunuzda, bu bir yuh. Bununla birlikte, JS'de önceden pişirilmiş şeyleri daha düşük beceri düzeyinde uygulamak hiç de zor değil.


0

Bu soru biraz tarihli ama JavaScript / Java / C ++ kullanmanın nedeni, Java veya C ++ 'ın kod parçalarını kolayca desteklememesidir.

JavaScript hiç icat edilmemiş olsa bile, Java veya C ++ sunucu tarafında yürütülecek Kaynak Kodu Parçası için iyi bir seçim olmazdı. Başka bir dil seçer veya kendi dillerini icat ederlerdi. Günümüzde kendi dillerini oluşturmak için kullanılan ürünler, kendi alanlarında uzmanlaşmış kendi üretim kurallarını, AST, yorumlayıcı vb.

Ancak JavaScript ile, ürününüz için bir Etki Alanına Özgü Dil (DSL) oluşturmak ve etki alanı ile ilgili olmayan diğer tüm altyapıları oluşturma konusunda endişelenmenize gerek kalmadan motoru gömmek son derece kolaydır.


0

Olay güdümlü programlama modeli

JavaScript, bilgi işlem için olay güdümlü paylaşılmamış bellek yaklaşımıyla oluşturuldu. UI geliştirmede bu tamamen eski bir şapka. "Başvurunuzun" bir sürecin kontrolünde olduğu varsayımı yoktur. İşlem API'sı yok. Ana işlevi de yoktur.

"Uygulamanız", belirli bir şey olduğunda çalıştırılacak komut dosyaları topluluğudur.

  • komut dosyası tarayıcıya yüklenir
  • html sayfasının yüklenmesi belirli bir noktaya ulaşır
  • Belirli bir öğeyle belirli bir kullanıcı etkileşimi hakkında

Bu, veri dönüşümleri için gereken küçük işleme mantığı parçaları ile oldukça iyi uyuşmaktadır.

Komut Dosyası Dili

Derleme aşaması olmadan çalışabilmek, işleme talimatlarının kolayca saklanabileceği anlamına gelir. Komut dosyasını metin olarak kolayca kaydedebilir ve herhangi bir özel veri türü veya bilgisi olmadan iletebilirsiniz.

Oldukça Basit, Kararlı ve Geriye Uyumlu

Bugün yazdığınız kod 10 yıl öncesinden çok farklı değil. Sürüm oluşturma, bunu yerleştiren kişiler için büyük bir sorun teşkil etmez.

performant

İçeride bir ton iş bulunan birkaç iyi açık kaynak motoru var. Birçok alternatiften biraz daha hızlı çalışır.

Kıvırcık Parantez

Pek çok insan, bir dizi programlama dili ile rahatlığı kısıtlanmıştır. Sadece Java veya C # programlamayı biliyorlar. Bu yüzden JavaScript'i kolayca öğrenmeyi umuyorlar çünkü tanıdık geliyor. Elbette bu bir yanılsamadır. Python'u öğrendiğimde JavaScript öğrenmekle hemen hemen aynı hızdaydı. Sözdizimi, tamamen belirsiz olmadığı varsayılarak sadece duygusal olarak önemlidir.

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.