【问题标题】:Why would I want to use server-side JavaScript?为什么我要使用服务器端 JavaScript?
【发布时间】:2009-12-15 19:04:14
【问题描述】:

我很困惑,我经常阅读关于服务器端 JS 的讨论,我为什么要使用它?看起来它的执行速度比几乎任何其他语言都要慢,它也缺乏更复杂的语言所具有的许多约定。

是否可以将整个对象从客户端交给服务器,对其进行操作并将其返回?

只是在努力理解它的概念。

【问题讨论】:

  • JavaScript 本身并不慢;从历史上看,JavaScript 解释器恰好没有针对速度进行优化。绝对不再是这种情况了——当前一代的 JS 解释器(V8、SquirrelFish)非常快,而且只会越来越快。
  • 是的,但是这些解释器不是客户端浏览器的一部分,他们可能不会将这些解释器提供给他们的服务器......或者他们会吗?
  • @jpsilvashy - 我很乐意接受这个赌注的另一面。你愿意赌多少钱?
  • 您说的是“解释性语言”,所以 IronPython 或 IronRuby 似乎是最明显的对手。我让你选择....
  • 我愿意将 .Net 上的 JS 与任何解释的 .Net 语言(IronPython、IronRuby 等)或 JVM 上的 JS 与任何 JVM 解释语言(Groovy、Jython、JRuby)进行比较。会是什么......

标签: javascript


【解决方案1】:
  • 我认为你不能在不知道 JavaScript 在哪里运行的情况下谈论 JavaScript 的速度。我认为 V8 可以击败 ruby​​ 或 python 等脚本语言。
  • 在我看来,JavaScript 是比 PHP 或 Perl 更清晰的语言。但这只是我个人的看法。

那为什么不呢?

有趣的链接:v8cginode.jswxJavaScript 和最后但并非最不重要的CouchDB(基于 JavaScript 的数据库服务器)

【讨论】:

  • 这里的信息很酷,解释了很多。我没有意识到 CouchDB 是基于 JS 的!各位不要误会!我没有反对 JS,我只是不知道服务器端 JS 是干什么用的。
  • 别忘了你也可以在微软(经典)ASP页面中运行JavaScript(JScript)服务器端!
  • 此外,用于“标准化”服务器端 javascript 基础设施(模块、包、通用 API 等)的社区成立不到一年,现在改名为 CommonJS (以前的 ServerJS)。我建议查看 CommonJS 主页 (wiki.commonjs.org/wiki/CommonJS) 和一个名为 Narwhal (narwhaljs.org) 的参考实现。
【解决方案2】:

是的,您可以使用 JSON 将整个对象从客户端交给服务器,对其进行操作并将其返回。您还可以在客户端和服务器之间共享代码。

【讨论】:

    【解决方案3】:

    我为什么要使用它?

    它减少了您的项目使用的语言数量。对于现代 web 应用程序,无论如何您都需要具备一些 JavaScript 知识的开发人员,如果您需要 JavaScript 专业知识,那么与需要 JavaScript+Java 或 JavaScript+ 相比,您将有更多的劳动力可供选择C#,或 JavaScript+任何东西。

    看起来它的执行速度比几乎任何其他语言都要慢,

    你能给出任何理由你相信吗?当然,这完全是虚拟机实现的问题,因此您无法做出明确的陈述。此外,几乎不言而喻,Web 应用程序的瓶颈通常是 DB 访问而不是 CPU。

    它还缺乏更复杂的语言所具有的许多约定。

    嗯...不是吗?如今,JavaScript(或者,准确地说,ECMAScript)本身就是一种非常复杂的语言。它有异常、闭包、关联数组......真的,你需要的。

    是否可以将整个对象从客户端交给服务器,对其进行操作并将其返回?

    不是对象本身,因为底层协议仍然是 HTTP,但使用 JSON 几乎是一回事。

    【讨论】:

      【解决方案4】:

      如果您知道该语言并且可以在非常高的水平上使用它,您为什么要切换到其他语言?现在有一个非常好的和快速的服务器端 JS,称为nodejs。在我看来,nodejs 证明了服务器端 JS 不是传说,而是现实。

      【讨论】:

        【解决方案5】:

        不要忘记,您可以获得 Mootools 等人为您提供的所有客户端优势,但在服务器端,当您启动并运行它时,让编码成为一种纯粹的乐趣。至于速度,就看你做什么了。我们有一个网站,每个页面请求运行 1000 行 JScript ASP 代码,每天有 60K 用户,1000 个页面。它正在快速变亮!速度如此之快,以至于在 .net 中重新编码的情况还不够强大,因为当前代码可以很好地处理它。

        编写 Javascript 客户端一开始可能会有点伤你的头,没有元素会与一些真正古怪的功能相混淆,只是漂亮的编码风格(我们将一个烦人的函数/闭包传递到我们的数据库代码中,例如:

        var hotels = DataLayer.FindByHotelByStarRating( 4 )
        
        hotels.each( function( hotel ) {
          %>
          <li><%= hotel.name.htmlEncode() %> is rated as <%= hotel.star_rating %> star</li>
          <%
        }, this );
        

        现在它非常强大而且非常有趣,而且学习 Mootools 或高级 JS 的时间并没有浪费,因为我们可以在服务器端和客户端使用它。

        我们可以使用相同的验证逻辑、相同的 JSON 函数、相同的对象(如果您小心的话)等等。带有 JScript 的 ASP 比 VBScript 好 100 倍/更干净/更简单/更好,让我的工作变得快乐而不是 VBScript 头痛。

        最重要的是,它非常有趣!

        【讨论】:

        • 嗯.. 你说 all 是客户端的优点,但实际上这些库提供的大多数客户端东西主要是 DOM 操作,是吗?很棒的代码示例! +1
        • 嗯,你说得对,我更多地指的是我们使用的 Mootools 的 Class、String、Function、Number、Date、Events 部分。然而,JS 不仅仅是关于 DOM 的东西。我们显然不能在服务器端使用 HTML DOM,但我们受到启发为我们的 MSXML Doc 对象创建了一个漂亮的 DOM 包装器,它为我们提供了一些在 XML DOM 的服务器端导航的不错的捷径,真的应该释放那个这些天:)
        • Mootools 有一个特定的服务器端版本供他们使用:mootools.net/download 让您不必像我们必须的那样从客户端下载破解您自己的版本:)
        【解决方案6】:

        我很困惑,我经常阅读关于 服务器端 JS,我为什么要 用那个?

        这样您就可以用一种语言编写所有应用程序。这样您就可以在服务器和客户端之间共享对象,而无需经过序列化/转换/等。这样您就可以一次性编写代码(例如字段验证)

        似乎它会执行方式 比其他任何东西都慢 语言,

        不正确。 JS 速度慢的感觉是由于在客户端使用。引擎实现非常缓慢,并且还存在 DOM 问题。 已经证明[1] JS 在性能上可以接近 C。这是去年。有进一步的性能改进。还可以查看 [Node.js 网络服务器的基准与其他 [2]。

        它还缺乏更复杂的语言所具有的许多约定。

        您的意思是 [闭包、生成器、map/reduce[3]、[高阶函数、动态类型和基于原型的 OO 范例,比基于类的 OO[4] 更灵活?

        是否可以处理整个对象 从客户端到服务器, 操纵它们并将它们返回?

        它[5] 是[6]。

        -- MV

        1:shaver.off.net/diary/2008/08/22/the-birth-of-a-faster-monkey/ 2:four.livejournal.com/1019177.html 3:ejohn.org/blog/javascript-18-progress/ 4:www.ibm.com/developerworks/java/library/j-cb12196/index.html 5: www.jaxer.org/ 6:juicejs.org/

        【讨论】:

          【解决方案7】:

          但是,那些口译员不是吗? 客户浏览器的一部分,他们 可能没有那些可用的 他们的服务器

          查看 www.commonjs.org

          -- MV

          【讨论】:

            【解决方案8】:

            Javascript 并不慢; DOM 是。

            【讨论】:

              【解决方案9】:

              使用 nodejs 已经有一段时间了,并且已经为它编写了一个 mongodb 驱动程序,我不得不说我印象非常深刻。首先,因为我使用的是存储 JSON 对象的 mongo,所以我有一个客户端到 db 管道,这都是 javascript。

              因此,虽然我仍在工作中使用 ruby​​,但我已将所有个人项目转移到 Javascript,因为我很懒,无法忍受 SQL、Ruby、Javascript 之间不断的上下文切换。

              如果没有别的。 NodeJS 是重新学习一种我们很少有人投入大量精力的语言的绝妙方法,它只会让你成为更强大的 Web 开发人员:D

              【讨论】:

                【解决方案10】:

                我来晚了。 JavaScript / ECMA-Script 是一种可以绑定到任何库的基础语言。在浏览器中使用时,它会向该语言公开几个浏览器级别的对象(窗口、文档等)。您嵌入 .html 文件或链接为 .js 文件的脚本被编程为对这些对象执行所需的操作。

                同样的概念也适用于服务器端。例如,NodeJS 公开 HTTP Server 和 Client 对象,您可以执行与 PHP、CGI 脚本、Python 或 Ruby 框架或 Apache 模块相同的操作。

                Google 的带有 JIT 的 V8 JavaScript 引擎进行了很好的优化。它用于 Chrome(浏览器)和 NodeJS(服务器)。

                我曾经在浏览器中使用 JavaScript 进行 AJAX 调用,并为服务器使用 Python / WSGI。这种混合的编程模式让我很恼火。因为我发现了 NodeJS,所以我可以用同一种语言进行服务器端和客户端编程。令人惊讶的是,NodeJS 的吞吐量是我使用 Python 实现的两倍多。在 nodejs.org 上有一些更详细的分析。简单的结论是 JS 在使用 V8 时非常接近 C/C++ 的速度。

                【讨论】:

                  【解决方案11】:

                  嗯..你说的都是客户端 天哪,但实际上大部分 客户端填充这些库 提供主要是 DOM 操作, 是吗?

                  确实如此。但你可以use jquery (for example) to generate HTML serverside

                  -- MV

                  【讨论】:

                    【解决方案12】:

                    服务器端 JScript 只是 .NET 语言家族中的另一种语言。在语法和功能方面,它几乎是我们从工作客户端所知道的 Javascript,但有一个明显且非常显着的区别,它是在服务器上执行的。

                    因此,该环境是任何 .NET 语言程序所期望的标准 .NET 环境,特别是没有 DOM。服务器端 JScript 受到与任何其他服务器端程序相同的限制。特别是没有办法直接将客户端 JavaScript 对象传递给服务器端程序。

                    性能方面的 JScript 代码与任何其他语言一样,因为服务器端 JScript 是编译的,而不是解释的。类型强制会引入一些开销,但很少。

                    至于您为什么要使用 JScript - 主要是因为它是一种脚本语言。如果您需要程序的用户使用一种语言来表达一些简单的条件和/或计算,您可能会发现将 JScript 作为提供这些表达式的一种方式是一个有吸引力的选择。至少对我来说效果非常好

                    【讨论】:

                    • 我不知道为什么有人试图对你投反对票...如果我在这里错了请纠正我,但 JScript 与 JavaScript 有点不同,因为它包含一些 .NET 特定的实现.
                    • 这是否意味着我不能真正将服务器端 JS 与运行 rails 的 ubuntu 服务器一起使用?
                    • @jpsilvashy - 不是 .NET 版本(除非您正在运行 MONO),是的,它有办法处理 .NET 的东西 - 类等。虽然文档很粗略
                    • 您可以使用 JSON 在客户端和服务器之间传递对象,反之亦然。 JScript 是 IIS 特定版本的 JavaScript。更便携的解决方案是兼容 ECMA 脚本的 NodeJS。
                    【解决方案13】:

                    最佳答案可以在on this page找到

                    “用于创建当今现代动态网页的最流行的方法之一是服务器端脚本语言。这些动态页面的构建方式使得所有服务器进程都在页面交付给用户之前发生。这意味着您只需要最基本的互联网浏览软件即可查看当今网络上最复杂、最动态的页面。”

                    这也为移动浏览器提供了与完整的 PC 浏览器相同的体验。

                    【讨论】:

                    • 老兄,这几乎没有描述任何内容。我知道 Ruby、C 和 PHP,我可以用它们构建一个 Web 应用程序……你在说什么!
                    • 您链接到的那篇文章介于过时和疯狂之间。 JavaScript 与 VBScript 之战很久以前就结束了,VBScript 被打得落花流水。
                    • 哈哈,我认为我们在浪费选票,我不认为我们可以投票让他不复存在。
                    猜你喜欢
                    • 1970-01-01
                    • 2020-01-31
                    • 2012-02-22
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-01-16
                    • 2013-03-29
                    相关资源
                    最近更新 更多