为什么在MongoDB和CouchDB中使用Javascript而不是Java,C ++等其他语言?


19

我在SO上问了这个问题,但建议在这里尝试。因此,它去了:

到目前为止,我对Javascript的理解是,它是一种客户端语言,可以捕获事件并使网页动态化。

但是在阅读MongoDB和CouchDB之间比较时,我注意到它们都使用Javascript。这使我想知道为什么选择JavaScript而不是其他常规语言的原因。

我想我想了解JavaScript的作用及其相对于其他语言的优势。

更新:我不是在问两个数据库支持的语言/驱动程序。比较表明:

CouchDB和MongoDB都使用Javascript。CouchDB在视图的构建中广泛使用Javascript 。

MongoDB还支持在服务器端运行任意javascript函数,并将javascript用于map / reduce操作。

我缺乏理解是关于为什么在后端工作中完全使用Javascript。为什么首选在CouchDB中构建视图或使用map / reduce操作?为什么不使用C / C ++或Java?使用Javascript进行此类后端工作有什么优势?


3
JavaScript不仅是浏览器脚本语言。其他一些应用程序则嵌入了Javascript或类似语言(例如Flash中的ActionScript,以及用于编写多个Adobe应用程序脚本的Javascript)。我不确定,但也许Javascript从未打算嵌入到Web浏览器中。那么...为什么不将其嵌入到后端数据库应用程序中呢?
Steve314

既然我已经看到/阅读了在浏览器中运行JS的知识,我想知道它如何在服务器端运行而不打开浏览器?
杰夫·穆斯克(Jeff Mussk)

1
谢谢。你是对的。他们正在使用SpiderMonkey编译器来做服务器端JS部分。en.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine)@Raynos指出了这一点。
杰夫·穆斯克,

6
为此,您需要一个JavaScript引擎,例如V8SpiderMonkey。浏览器之外有很多Java脚本用途,维基百科列表很长
yannis 2011年

嗯-我之前的评论作为一个概括是准确的,但是对我来说更加具体可能会很危险-我对MongoDB或CouchDB一无所知。尽管没有理由使用后端数据库应用程序。在服务器上不能拥有自己的独立于浏览器的Javascript解释器,我不知道它是否是这样处理的,下面的答案表明可能不是。
Steve314

Answers:


15

移动代码和跨平台

JavaScript是所谓的移动代码,该代码从服务器(在这种情况下为MongoDB和CouchDB)传输到客户端(Web浏览器),并在客户端上执行而无需安装过程。

JavaScript运行时环境(Web浏览器)在许多平台上也广泛可用。这使JavaScript成为一种很好的跨平台语言。

JavaScript不用作主要的后端语言

MongoDB后端是用C ++实现的,而CouchDB是用Erlang实现的。因此,JavaScript不用作这些系统后端的主要语言。

mongodb.com

用C ++编写

ouchdb.apache.com

CouchDB用Erlang编写,Erlang是一种健壮的功能编程语言,非常适合构建并发分布式系统。Erlang提供了一种灵活的设计,可以轻松地进行扩展和扩展。


1
谢谢您的答复。“ CouchDB在视图的构建中广泛使用Javascript”。那么,为什么客户端是用于后端工作(例如构建视图)的浏览器?对于这样的任务,为什么浏览器进入了画面。
杰夫·穆斯克,

@ startup007:请参阅我的答案的第一部分。如今,Web浏览器已安装在大多数系统上(例如Mac OS X,Windows,Linux,iPhone,Android),因此用户无需安装任何内容,因为Web浏览器可以执行JavaScript(移动代码)。
乔纳斯(Jonas)

我很抱歉没有马上得到它。让我详细说明。那么这些数据库是否会在服务器端打开浏览器来完成任务的某些部分,然后返回JSON输出?
杰夫·

1
谢谢雷诺斯!Spidermonkey上的Wiki说:“ MongoDB,另一个NoSQL数据库系统使用SpiderMonkey来执行服务器端JavaScript。” zh.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine)。嗯,很有趣
杰夫·穆斯克,

4
错误的是,MongoDB和CouchdB都不使用浏览器作为客户端。数据库客户端是应用程序(通常是Web应用程序,但可以是任何一种应用程序)用来管理存储在数据库中的数据的库。图片中没有浏览器。JavaScript用作数据定义语言(JSON的超集),也用作存储过程语言,它在数据库引擎中执行,而不是在客户端上执行,当然也不在任何浏览器中执行。
哈维尔

7

因为JavaScript是一种脚本语言。

这是一种人们熟悉的灵活而动态的语言。

使用JavaScript的另一个原因是因为它与这些数据库使用的JSON格式完全吻合。

最后,这些数据库需要一种可以解释的语言。因为这些查询的代码是通过网络发送的。

所以你需要一个

  • 动态
  • 灵活
  • 熟悉的
  • 解释的

语言。我认为JavaScript在这里不是一个坏选择。选择它可能是因为具有C样式语法。

现在为什么要选择JavaScript而不是另一种脚本语言是一个很好的问题。


2
Now why JavaScript was chosen over another scripting language:我可以推测这是因为JavaScript是使用最广泛的脚本语言,通过在浏览器上的使用经过了严格的测试,并且有许多出色的开源解释器实现。CouchDB的使用uneval()暗示了他们已经在SpiderMonkey的基础上构建了自己的解释器。
yannis

微软很早以前就在客户端中支持VBscript,但值得庆幸的是,它从未成功……
Mark K Cowan 2014年

6

当我们意识到使用JS编写代码时,我们所有人都必须吃不起眼的馅饼:

  • 资料库

  • 伺服器

  • 操作系统

  • 以及无数的库,框架,渲染引擎和编译语言,

...因为它更好。

认真地,请...听我说。不要射击信使。

询问Microsoft为什么他们以一流的公民身份使用JS构建Windows 8。或Mozilla的新移动操作系统,或IBM的Rivertrail,PhoneGap,ExtJS或WebGL。

如果专家们在执行中没有发现更好的东西,这些公司或项目中的任何一个都会成功吗?

答案是……他们做到了。我们做到了。因此,这里的主题应该明确:有更好的方法。

但是,更好的是主观的:因此我们必须进行深入研究和比较。什么是更好的?

它以AJAX开始...并没有停止。

  1. 非阻塞IO。这确实是一件大事,值得一提。在JS中,这是回调模式。事实证明,使用回调可以启用非阻塞服务器:Node.js〜大约8行代码。setTimeout()是一个回调。单线程异步处理。

  2. 灵活性。什么?-Java和C具有类和接口,但称为面向对象。JavaScript只有对象。但这被称为……别的东西。

    -只具有对象对于灵活性是一件好事,因为成员和方法在运行时是完全动态的。-原型继承并不可怕。一些专家将其描述为对象包。-JS对错误友好。-代码可以混合在一起而无需费很多力气,也无需了解“接口”,“抽象”,“继承”,“封装”,“多态性”即可生成复合组件。好东西,但是像JS中的耐克一样;你就去做。

  3. 数据转换。使用JSON,可以将对象从前到后,从后到前传输。没有XML数据转换。JSON很简单。

  4. 学习曲线低。可以剪切并粘贴极其复杂的代码,然后逐步对其进行调试。我听到一位同事...“ noobs”。但这不仅适用于菜鸟。

-事实证明,这对于Rapid Prototyping是一个非常不错的功能。利用这种“浏览器内设计”功能的网站越来越多,而且范围更广。运行时原型。检出JSFiddle和CodePen,还有MicroJS。的GitHub

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

It is a big deal.

更新:由于此发布,JavaScript现在已被其他语言广泛使用。

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可以做所有这些,以及
乔纳森

@JonathanLeaders-全部吗?:)
杰克·斯通

1
@ jonathan-leaders可以在网络浏览器上运行Python吗?
亚伦C

1
  • 您可以事半功倍-在这方面有两所学校。冗长的学校希望任何白痴都能理解的所有细节都细致入微。JS是另一所学校的一员,您可以在其中进行分层,以便在了解更详细的操作方式之前更容易掌握全局。用JS编写接口要比使用大多数语言IMO容易得多。

  • 一流的功能,闭包,原型继承-这是一个非常非常灵活的组合。如果需要,我们可以模仿课程。但是,对于那些非常了解JS的人来说,这似乎是没有意义的工作。JS比链式继承好得多。

  • 更高级别的阻塞很有用。是的,你听到了我的声音。它可以帮助您将JS作为信使而不是工作马来集中精力,并自己处理大量队列,同时允许函数调用之间的异步行为中断。

  • 我要说的是,对于编写功能强大的JS来说,学习曲线实际上有点陡峭,但是一旦到达那里,那就太麻烦了。但是,以较低的技能水平在JS中实现预烘焙的东西并不难。


0

这个问题有些陈旧,但是使用JavaScript vs Java / C ++的原因是Java和C ++都不容易支持代码片段。

即使从未发明JavaScript,对于将在服务器端执行的源代码片段来说,Java或C ++也是一个不错的选择。他们会选择另一种语言或发明自己的语言。过去,用于创建自己的语言,定义自己的生产规则,AST,解释器等的产品都是专门用于其领域的。

但是,使用JavaScript可以非常轻松地为您的产品创建域特定语言(DSL)并嵌入引擎,而不必担心创建所有其他与域无关的基础架构。


0

事件驱动的编程模型

JavaScript是使用事件驱动的非共享内存方法进行计算而创建的。在UI开发中,这完全是旧帽子。没有假设您的“应用程序”可以控制流程。没有流程API。也没有主要功能。

您的“应用程序”是脚本的集合,这些脚本将在特定事件发生时执行,例如

  • 脚本已加载到浏览器中
  • html页面加载达到一定程度
  • 与给定元素的特定用户交互

这与数据转换所需的一小部分处理逻辑非常匹配。

脚本语言

无需编译阶段即可执行意味着可以轻松存储处理指令。您可以轻松地将脚本另存为文本,并在没有任何特殊数据类型或知识的情况下将其传递。

非常简单,稳定且向后兼容

您今天编写的代码与10年前没有太大不同。对于嵌入它的人来说,版本控制不太可能成为问题。

表演者

有好几个好的开源引擎,其中包含大量工作。它的执行速度比许多替代方法要快得多。

大括号

许多人都无法使用多种编程语言。他们只知道例如如何编程Java或C#。因此,他们希望可以轻松学习JavaScript,因为它看起来很熟悉。这当然是一种幻想。当我学习Python时,它的学习速度几乎与学习JavaScript相同。假设语法并不完全晦涩,则仅在情感上有意义。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.