78

有时我在搜索一些 JavaScript 帮助时会遇到术语“服务器端 JavaScript”。你什么时候会使用 JavaScript 服务器端?如何?

我对 JavaScript 的体验一直在浏览器中。有没有编译好的JS?

4

12 回答 12

27

它不是 AJAX,除非人们不恰当地使用了这个词。顾名思义,SSJS 是在服务器上运行的 JavaScript,由独立的(即独立于浏览器的)JavaScript 引擎解释,如 SpiderMonkey。

何苦?好吧,我目前看到它未被充分利用的一个领域是数据验证。使用 SSJS,您可以编写一段代码,然后在服务器和客户端上都使用该代码。因此,您可以立即从客户端 JS 获得用户反馈,这些反馈将自动匹配服务器上发生的数据检查。

于 2009-01-19T21:43:26.697 回答
25

有一个项目Phobos,它是一个服务器端 JavaScript 框架。

过去,Netscape Web 服务器也提供服务器端 java 脚本。

在这两种情况下,JavaScript 的使用就像您在服务器上使用任何语言一样。通常用于处理 HTTP 请求并生成内容。

Rhino是 Mozilla 的 Java JavaScript 系统,它将 JavaScript 编译成 Java 字节码,JVM 可以选择 JIT。其他系统使用其他方式执行 java 脚本,甚至有些系统正在 JIT 编译他们的 java 脚本内部代码。

我预见到服务器上将会有越来越多的 JavaScript。当您在客户端用 JavaScript 编写“厚”应用程序时,您不妨在服务器上用 JavaScript 编写逻辑,这样就不必从一种语言到另一种语言的认知飞跃。环境会有所不同,但您的大部分代码和知识将是可共享的。

最后,就实现而言,JavaScript 可能是目前投资最多的单一语言。来自 Apple、Mozilla、Google 甚至 Microsoft 以及使其成为更高级语言的努力(即基本上是一个具有 Algol 语法无宏的 Scheme)。

大多数这些实现都隐藏在浏览器中,但这并不是说在服务器端也没有价值。

工具是 JavaScript 最缺乏的地方,尤其是在服务器端,但如果你考虑像 Phobos 这样的东西,你可以在 IDE 中调试服务器端 JavaScript,这是一个很大的进步。

就个人而言,我在我的应用程序中使用 JavaScript,比如白漆。它以非常低的成本提供了廉价的可扩展性,并且是一个很好的推动者。

于 2009-01-19T22:07:21.903 回答
22

2013年新闻

Node.js(另见Wikipedia 文章)是成功的,它的社区正在成长

MongoDB(服务器端)、Chrome(客户端)和Node.js(服务器端)使用 V8 JavaScript 引擎

PS:您的所有项目模块只能使用一种语言,Javascript:客户端 API、客户端接口、“服务器集线器”和服务器数据库(例如存储过程)。所有程序员“一次编码”!


“ Server -Javascript”“Client-Javascript”语言之间的主要区别在http://www.commonJS.org/,Server-Javascript的标准库中进行了解释。

CommonJS自 2009 年以来就存在,今天(2013 年)是一个成熟的标准,用于MongoDBNode.js。


历史注释:最古老的活动“客户端+服务器 Javascript”(包括使用 PostgreSQL)打开包还活着! Whitebeam
于 2001 年发布并从那时起不断发展,是一种成熟的 Javascript(和 DOM)技术。最后一次更新是在 2016 年 1 月。


2016年新闻

Node.js引擎继续作为基于 Chrome 的V8 JavaScript构建的运行时......事实上,现在已经取得了全面的成功!最后一个版本是v7.0v6.8 LTS

JSON作为数据交换格式,在过去几年中的兴趣持续增长,在 2016 年超过了对 XML 的兴趣(另请参见2011 年超过的科学上下文)。作为原生 Javascript 格式,它也是一个很好的语言趋势指标。

自 2014 年以来,(更快的)V8 引擎也是最常用的:在最流行的客户端桌面上的 Chrome和 Android 上的 WebView)和服务器上流行——Node.js 作为运行时,PostgreSQL 和PL/V8用于 SQL 和存储过程.

...也许 2016 年最重要的服务器端贡献是对 JSON 和 Javascript 的快速且强大的数据库支持:使用 PostgreSQL 9.1+ (2016-10),您可以通过简单的方式加载 PL/V8(以及 Coffeshop 等方言)CREATE EXTENSION命令; 最重要的是 PostgreSQL 9.5+ (2016-10),一组完整的正交JSON 和 JSONb 函数和运算符

因此,事实上,存在一个快速、弹性和可靠的 统一 JavaScript 开发堆栈

于 2013-09-01T21:25:09.547 回答
20

经典 ASP 能够在服务器上使用 JavaScript,尽管大多数人使用 VBScript。

在服务器上使用 JavaScript 的一个引人注目的用途是作为客户端数据验证的补充。例如,您可能在客户端和服务器上使用相同的 JavaScript 验证库。这可确保您在客户端上使用与服务器上相同的逻辑,但(可能)通过在客户端进行预验证来避免不必要的往返。

Wikipedia在此处列出了许多服务器端 JavaScript 实现。

于 2009-01-19T21:43:31.453 回答
6

它可以指使用 javascript 将消息发布到 Web 服务器而不重新加载页面:换句话说,AJAX。

但更有可能的是,我认为这意味着类似于Aptana/Jaxer(或者,今天的 Node.js),它使用 javascript 作为服务器端语言。在这种情况下,请记住 javascript 只是一种语言:Web 浏览器中使用的 DOM 是一种 API。服务器端 javascript 引擎将提供自己的 API 对象,适用于数据库和文件系统访问等服务器端任务。

由于客户端验证问题,服务器端 javascript 是一个有趣的想法:您希望在客户端进行验证以避免向服务器发送不必要的请求。这提高了服务器性能并减少了客户端的延迟。但是您必须在服务器端进行验证,因为您不能信任客户端。这会导致客户端和服务器之间出现大量重复代码。

理论上,如果您的客户端和服务器语言匹配,您将不再需要相同逻辑的两个实现。实际上,它并不能很好地工作,因为页面请求的客户端和服务器视图是如此不同,并且因为您无法控制客户端使用的 javascript 引擎。

于 2009-01-19T21:37:20.000 回答
3

这真的取决于您是在谈论 ASP.NET 还是 Classic ASP。如果您使用的是 ASP.NET,那么使用 Javascript 的理由并不多。

ASP Classic 是一个不同的例子。您可以在 ASP 中的服务器端使用 Javascript,就像使用 VBScript 一样。您可以像通过 VBScript 一样访问 Application、Server、Request 和 Response 对象。

在 ASP 的服务器端使用 Javascript 而不是 VBScript 可以带来真正的好处。这意味着您可以在浏览器代码和服务器代码之间共享代码。这也意味着您的开发人员不需要处理两种不同的语言。

不过,ASP 中的服务器端 Javascript 也有一些缺点。首先,在字符串连接时,它似乎不如服务器端的 VBScript 快。它也不如 VBScript 调用 COM 对象好(您只能通过返回值从 COM 调用中获取数据,而不是通过 out/byref 参数)。

于 2009-01-19T21:43:21.190 回答
2

您可能希望在浏览器和服务器中都有一些功能,以实现完全相同的实现。

一个示例是 wiki 语法的渲染器,您在浏览器中运行所见即所得编辑器并在服务器上运行以渲染结果页面。这样你就知道在这两种情况下渲染的结果将完全相同。

显然, Rhino可以将 JavaScript 编译为 Java 类。

于 2009-01-19T21:42:10.723 回答
1

传统上,Javascript 围绕文档对象模型运行。但是,如果您在一家 Java 商店工作并且想要一个围绕您的自定义对象模型的脚本引擎怎么办?这就是服务器端 Javascript 出现的时候。

http://en.wikipedia.org/wiki/Server-side_JavaScript

于 2009-01-19T21:43:10.470 回答
1

我记得Cocoon(Apache 的 Java/XML/Javascript MVC 框架)我曾经使用服务器端 Javascript,因为有一些东西(我相信 cforms)需要用 Javascript 编写并在服务器上运行,即使我相信你可以用Java编写。

那时我们使用的是 Rhyno,请查看: http: //peter.michaux.ca/articles/server-side-javascript-with-rhino-and-jetty

于 2009-01-19T21:48:50.443 回答
1

是的,我刚刚在某个名叫John Resig的人的博客上阅读了有关 SSJS 的信息。

他描述了一个名为 Jaxer 的引擎,他说它是“想象一下撕掉 Firefox 的可视化渲染部分,并用 Apache 的钩子代替它——粗略地说,这就是 Jaxer。”

对于任何了解 ASP.NET 的人来说,HTML 看起来很熟悉

<html>
<head>
  <script src="http://code.jquery.com/jquery.js" runat="both"></script>
  <script>
    jQuery(function($){
      $("form").submit(function(){
        save( $("textarea").val() );
        return false;
      });
    });
  </script>
 <script runat="server">
    function save( text ){
      Jaxer.File.write("tmp.txt", text);
    }
    save.proxy = true;

    function load(){
      $("textarea").val(
        Jaxer.File.exists("tmp.txt") ? Jaxer.File.read("tmp.txt") : "");
    }
  </script>
</head>
<body onserverload="load()">
   <form action="" method="post">
    <textarea></textarea>
    <input type="submit"/>
  </form>
</body>
</html>

注意 runat="sever" 和 runat="both"

于 2009-01-19T21:53:23.087 回答
1

http://steve-yegge.blogspot.com/2007/06/rhino-on-rails.html

查看 Steve Yegge 如何在 Rhino 中使用服务器端 JavaScript 以及为什么。他有很多关于他如何看待 JavaScript 正在兴起和到来的东西。

于 2009-01-19T21:56:00.600 回答
1

使用ASP,您可以通过多种方式使用服务器端 JavaScript。我最常用的方法是在客户端和服务器上执行相同的代码进行验证

file.js

<!--//--><%

//javascript code
function example(){return "Hello, World!";}

//%>

file.html

<%@LANGUAGE="javascript"%>
<!-- METADATA TYPE="typelib" 
FILE="C:\Archivos de programa\Archivos comunes\System\ado\msado15.dll" -->
<!--#include file="file.js"-->
<html>
<head>
  <script language="javascript" src="file.js"></script>
</head>
<body>
<%=example();%>
<script language="javascript">alert(example());</script>
</body>
</html>

file.js以允许包含相同文件的方式开始和结束。

于 2009-07-13T18:40:15.317 回答