您何时以及如何使用服务器端JavaScript?[关闭]


76

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

我对JavaScript的体验一直在浏览器中。是否有JS的编译版本?


8
一个有趣的问题
DFectuoso

请参阅有关Jaxer的问题:stackoverflow.com/questions/98915/…–
Prestaul,


我想这可能是有帮助这里-维基百科上的服务器端JavaScript的解决方案比较:en.wikipedia.org/wiki/...
杰夫麝香

这个问题几乎等同于“何时以及如何统一开发堆栈中的语言?”。。Javascript是客户端的标准语言,是用于传输的JSON。因此,在服务器端使用Javascript可以统一开发。在这里查看答案
彼得·克劳斯

Answers:


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。它以很少的成本提供了廉价的可扩展性,并且是一个很好的推动者。


请注意,有改善服务器端JS的互操作性和可用性库努力wiki.commonjs.org/wiki/CommonJS
oberhamsi


这个答案更是一个预言当时到服务器端JS喜欢的Node.js等的提高
阿肖克MA

27

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

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


有一天,我想通过这种方式从数据库CHECK约束条件自动生成JavaScript。(我想知道pgsql是否具有JS绑定吗?)
Kev

1
+1,从没考虑过验证角度
orip

我在某些旧版ASP应用程序上使用了这种方法。这不是没有问题(与IE,FF和Opera一样的问题),但是一旦成功使它运行起来,它就很棒。
EstebanKüber'09

22

2013年新闻

Node.js(另请参阅Wikipedia文章)是一种成功,并且它的社区正在增长

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

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


之间的主要区别“服务器的JavaScript”“客户端JavaScript的”语言,在解释http://www.commonJS.org/,对于标准库服务器的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开发堆栈


关于“ JSON ..作为本机Javascript格式,它也是一种很好的语言趋势指标。” 不,JSON流行性正在爆炸,因为当需要在设备(电话,台式机,服务器)之间传递小量的键值对数据包时,它在其他语言中也同样有用。对于简单数据需求,它比XML更易于使用。特别是,Apple和Google都使用JSON进行推送通知。仅此一项就足以使用途激增!
ToolmakerSteve

关于“统一开发者”,也有兴趣在客户端和服务器使用的MVC模型中保留某些客户端/服务器同构。请参阅 isomorphic-universal-javascript文章或git文章
彼得·克劳斯

...由专利纠纷Oracle / Google在2019年引起的大问题,请参见github.com/plv8/plv8/issues/364
Peter Krauss

20

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

服务器上JavaScript的一种令人信服的用法是对客户端数据验证的补充。例如,您可能在客户端和服务器上使用相同的JavaScript验证库。这样可以确保您在客户端上使用与服务器上相同的逻辑,但是(可能)通过在客户端进行预验证来避免不必要的往返。

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


我更喜欢你的措辞。:) +1
凯夫

我们在上一家公司使用JScript w / ASP。好处是更少的语言(我们让前端开发人员编写一些服务器端数据调用)和代码重用,因为您将使用几乎完全相同的代码在双方上进行验证。好东西,但现在我正在努力寻找将其放入Apache的好方法。
亚历克斯·麦普

6

它可能是指使用javascript将消息发布到Web服务器而无需重新加载页面:换句话说就是AJAX。

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

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

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


旧文章,但这是我阅读过的最清晰,最简洁的服务器端JavaScript使用方式。+1
wootscootinboogie

3

这实际上取决于您是在谈论ASP.NET还是Classic ASP。如果您使用的是ASP.NET,则没有太多使用Javascript的理由。

ASP Classic是另一种情况。您可以在ASP中的服务器端使用Javascript,就像使用VBScript一样。您可以像通过VBScript一样访问Application,Server,Request和Response对象。

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

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


1
OP从未提及特定技术。他可能很容易想到诸如Jaxer之类的东西。
亚当·拉瑟克

许多人没有意识到您甚至可以在Classic ASP中执行服务器端Javascript。因此,我认为这对解释“服务器端Javascript”一词仅指普通的ASP Classic会有所帮助。
andynormancx

使用运算符(+)可以使JScript字符串concat稍微慢一些,但是将其推入数组并进行连接非常快,并且难度不大。如果连接足够多的字符串很重要,那么要做起来就不难了:var buffer = []; buffer.push('strings'); 返回buffer.join('');
Prestaul

2

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

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

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





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”


我张贴了这个上面,但也许它属于这里......有些反馈Jaxer的:stackoverflow.com/questions/98915/...
Prestaul

@John Nolan我相信John Rseig是jQuery背后的“家伙”
jeff musk

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 开始和结束允许包含相同文件的方式。

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.