偶尔我会搜索一些JavaScript帮助,然后我会遇到“服务器端JavaScript”这个术语。你什么时候使用JavaScript服务器端?如何?
我的JavaScript体验一直在浏览器中。是否有JS的编译版本?
答案 0 :(得分:27)
这不是AJAX,除非人们使用不正确的术语。顾名思义,SSJS是在服务器上运行的JavaScript,由独立(即独立于浏览器)的JavaScript引擎(如SpiderMonkey)解释。
为什么要这么麻烦?那么,我目前看到它未充分利用的一个领域是数据验证。使用SSJS,您可以编写一段代码,然后在服务器和客户端上使用。因此,您可以从客户端JS获得即时用户反馈,该反馈将自动匹配服务器上发生的数据检查。
答案 1 :(得分:25)
项目Phobos是一个服务器端JavaScript框架。
Back In The Day,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语法的方案,没有宏)。
这些实现大多数都隐藏在浏览器中,但这并不是说服务器端也没有价值。
工具是缺少JavaScript的最大的地方,特别是在服务器端,但是如果你考虑像Phobos这样的东西,你可以在IDE中调试你的服务器端JavaScript,这是一个很大的进步。
就个人而言,我在我的应用程序中抛出JavaScript,比如白色涂料。它以极低的成本提供廉价的可扩展性,是一个很好的推动者。
答案 2 :(得分:20)
经典ASP能够在服务器上使用JavaScript,尽管大多数人都使用VBScript。
服务器上一个引人注目的JavaScript使用是对客户端数据验证的补充。例如,您可以在客户端和服务器上使用相同的JavaScript验证库。这可以确保您在客户端上使用与服务器上相同的逻辑,但(可能)通过在客户端预先验证来避免不必要的往返。
Wikipedia列出了许多服务器端JavaScript实现here。
答案 3 :(得分:20)
Node.js (另请参阅at Wikipedia article)是成功的,its community is growing!
MongoDB(在服务器上),Chrome(在客户端)和 Node.js (在服务器上)使用 V8 JavaScript engine。
PS:您只能对所有项目模块使用一种语言Javascript:客户端API,客户端界面,“服务器中心”和服务器数据库(例如存储过程)。所有程序员“编码一次”!
“Server-Javascript”和“Client-Javascript”语言之间的主要区别在http://www.commonJS.org/解释,的标准库服务器的JavaScript 的。
CommonJS 自2009年开始存在,今天(2013年)is a mature standard用于 MongoDB 和 Node.js 。
历史记录:最老的活动“客户端+服务器Javascript”(包括使用PostgreSQL)打开包是活着的!
2001年发布,自那时起不断发展,Whitebeam是一种成熟的Javascript(和DOM)技术。最后一次更新是在2016年1月。
Node.js引擎继续作为基于Chrome的 V8 JavaScript 构建的运行时...现在实际上是一个巩固的成功!最新版本是 v7.0 和 v6.8 LTS 。
作为数据交换格式,JSON在过去几年中不断增长,having surpassed in 2016 the interest in XML(另见in the Science context, where surpassed in 2011)。作为原生Javascript格式,它也是一个很好的语言趋势指标。
(更快)V8 engine也是最常用的,自2014年以来:在最受欢迎的客户端(Chrome at desktops和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 and JSONb functions and operators的完整正交集。
因此,事实上,有一个快速,有弹性和可靠的 统一的JavaScript开发堆栈 。
答案 4 :(得分:6)
它可以指使用javascript将消息发布到Web服务器而无需重新加载页面:换句话说,就是AJAX。
但更有可能的是,我认为这意味着像Aptana/Jaxer(或今天的Node.js),它使用javascript作为服务器端语言。在这种情况下,请记住javascript只是一种语言:Web浏览器中使用的DOM是一种API。服务器端javascript引擎将提供自己的API对象,适用于服务器端任务,如DB和文件系统访问。
服务器端javascript是一个有趣的想法,因为客户端验证问题:您希望在客户端进行验证,以避免向服务器发送不必要的请求。这可以提高服务器性能并减少客户端上的延迟。但是你必须做验证服务器端,因为你不能信任客户端。这导致客户端和服务器之间存在大量重复代码。
理论上说,如果您的客户端和服务器语言匹配,您将不再需要两个相同逻辑的实现。在实践中它不能很好地工作,因为页面请求的客户端和服务器视图是如此不同,因为您不控制客户端使用的javascript引擎。
答案 5 :(得分:3)
这真的取决于你是在谈论ASP.NET还是经典ASP。如果您使用的是ASP.NET,使用Javascript的原因并不多。
ASP Classic是一个不同的案例。您可以在ASP中使用Javascript,就像使用VBScript一样。您可以像通过VBScript一样访问Application,Server,Request和Response对象。
在ASP中使用Javascript而不是VBScript可以带来真正的好处。这意味着您可以在浏览器代码和服务器代码之间共享代码。这也意味着您的开发人员不需要处理两种不同的语言。
虽然ASP中的服务器端Javascript存在一些缺点。首先,它在字符串连接时似乎没有服务器端的VBScript快。它也不如调用COM对象作为VBScript(你只能通过返回值从COM调用中获取数据,而不是通过out / byref参数)。
答案 6 :(得分:2)
您可能希望在浏览器和服务器中都具有一些功能,以实现完全相同的功能。
一个示例是wiki语法的渲染器,您在浏览器中为WYSIWYG编辑器运行,在服务器上运行以生成结果页面。通过这种方式,您可以知道两种情况下渲染结果都完全相同。
显然Rhino可以将JavaScript编译为Java类。
答案 7 :(得分:1)
传统上,Javascript围绕文档对象模型运行。但是,如果您在Java商店工作并希望在自定义对象模型周围使用脚本引擎,该怎么办?这就是服务器端Javascript的用武之地。
答案 8 :(得分:1)
我记得Cocoon(Apache的Java / XML / Javascript MVC框架)我以前使用服务器端Javascript,因为有一些东西(我相信cforms)需要用Javascript编写并运行服务器即使我相信你可以用Java编写它。
到那时我们使用过Rhyno,请检查:http://peter.michaux.ca/articles/server-side-javascript-with-rhino-and-jetty
答案 9 :(得分:1)
是的,我刚刚在一个名为blog John的人Resig上阅读了SSJS。
他描述了一个名为Jaxer的引擎,他说这是“想象一下,扯掉Firefox的视觉呈现部分并用Apache的钩子替换它 - 粗略地说这就是Jaxer所做的。”
对于任何了解ASP.NET的人都看起来很熟悉
<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”
答案 10 :(得分:1)
http://steve-yegge.blogspot.com/2007/06/rhino-on-rails.html
了解Steve Yegge如何使用Rhino的服务器端JavaScript以及原因。他有很多关于JavaScript如何起作用的东西。
答案 11 :(得分:1)
ASP you can use Server Side JavaScript以多种方式。我最常用的方法是拥有same code executing on the client and on the server for validation。
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
以允许包含相同文件的方式开始和结束。