我刚刚开始为我的下一个项目试验Aptana Jaxer服务器端javascript引擎。我对此几乎没有任何疑问
通过使用服务器端JS,我们可以实现整个Web应用程序而无需使用任何服务器端语言(如C#,java等)。或者服务器端JS位于Web服务器和其他语言堆栈之间。
这真是一个更好的方法吗?
有什么优点和缺点?
这在性能方面如何运作良好?
是否有任何实时实施(公共网站)仅使用服务器端JS(没有其他语言)?
Aptana jaxer(开源)提供的替代方案有哪些?
我们如何实施& maitain db交易?我们可以在服务器端JS中做到吗?
是否可以在服务器端JS中开发RESTFul和SOAP服务.. ??
我知道这太长了(天真的问题)。我只是希望有人在实现serverside JS时已经遇到过这些问题。
修改
根据Matthew& Ken评论,我在问题上添加了一些清晰度这真的是一种更好的方法吗?
这是我打算问的问题。
这是一种比使用服务器端语言更好的方法(假设是c#),我们如何将它与网站的c#实现(性能,语言功能)进行比较? 哪一个是更好的方法,在服务器端单独使用JS或在其他语言堆栈和网络服务器之间的中间层使用JS?
答案 0 :(得分:19)
答案 1 :(得分:12)
通过使用服务器端JS,我们可以在不使用任何服务器端语言(如C#,java等)的情况下实现整个Web应用程序。
没有必要用任何其他语言编写代码,尽管许多服务器端JavaScript框架使用Rhino引擎,它允许您调用任何Java代码。
这真的是一种更好的方法吗?
我认为JavaScript(作为一种语言)确实比传统的服务器端语言更好或更差。它具有优势(以及其他动态语言,如Ruby和Python),如灵活性,快速原型设计(无双关语),灵活性等。另一方面,它没有Java和C#所具有的库支持或静态类型(我不会讨论哪个更好在这里;我喜欢两个因为不同的原因)。
如果您想要两者兼顾,可以使用JavaScript作为脚本语言,嵌入到您的应用程序中。 Rhino for Java和JScript.NET可以轻松地在JavaScript中操作“本机”对象。例如,您可以使用Java或C#编写域类,并使用JavaScript编写脚本,以获得更大的灵活性。如果您对JavaScript足够熟悉,那么使用单一语言编写可能会更简单。
我从未使用JavaScript编写过“真正的”服务器端应用程序,所以我无法真正判断它是否比.NET更好或更差(我也从未使用过JScript.NET)。我玩过一些有趣的框架,我目前正在使用Helma NG重写我的个人网站。到目前为止,这是一次很好的体验(比PHP更好,我从来没有真正喜欢过)。
有什么优点和缺点?
Advantanges:
缺点:
在性能方面效果如何?
性能应与其他脚本语言大致相当。
是否有任何实时实施(公共网站)仅使用服务器端JS(没有其他语言)?
我不知道任何使用JavaScript的大型网站,但可能会有一些。
Aptana jaxer(开源)的替代品有哪些?
维基百科有一个large list of options,但它没有太多有用的信息。有很多选择,成熟度和规模都很广泛。
以下是我熟悉的一些(在不同程度上)
我们能够如何实施&维护数据库事务?我们可以在服务器端JS中做到吗?
基于Rhino的框架允许您使用Java类,因此您可以获得完整的JDBC支持。我没有使用过Jaxer的数据库库,所以我对它的功能一无所知。
是否可以在服务器端JS中开发RESTFul和SOAP服务.. ??
RESTful API不应该是任何问题。我不知道对SOAP的任何具体支持,但它应该可能。
答案 2 :(得分:6)
作为序言,我在日常工作中使用SSJS。我们在SpiderMonkey上运行了一个相当大的(在复杂性和页面浏览量方面)网站。在我有经验的地方,我会补充马修的优秀答案。
这是一种比使用服务器端语言更好的方法(假设是c#)
“更好”真的取决于你想用它做什么。 JavaScript本身有一些很棒的功能,还有非常糟糕的功能。如果你真的想开发JS(客户端或服务器),我不能高度推荐你看Douglas Crockford的演示文稿, Javascript: The Good Parts 如果你还没有。他完成了一项非常出色的工作,并且他是一名优秀的演讲者。
我发现SSJS世界现在最缺乏的最重要的事情就是成熟。我不熟悉C#,但JavaScript没有成熟的标准库,也没有成熟的软件包分发方法。对我来说,这是一个很大的难题。
那就是说,请关注CommonJS组。他们正在努力定义那些确切的事情。此外,Jaxer Api文档列出了该框架附带的内置函数。
在性能方面效果如何?
JavaScript本身不是一种缓慢的语言,也不是一种特别快的语言。正如Matthew指出的那样,它应该与您使用的任何其他脚本语言相当。浏览器供应商之间的战争,看谁能建立最快的浏览器也将有利于SSJS人群。
V8团队在其引擎中构建的分代垃圾收集就是一个很好的例子。暂停虚拟机以从堆中释放无法访问的对象并回收它们的内存可能有点慢,但它们通过减少垃圾收集器运行时需要检查的对象数量来减轻这种情况。
我们能够如何实施&维护数据库事务?我们可以在服务器端JS中做到吗?
Jaxer似乎拥有MySQL和SQLite数据库API。正如Matthew所说,如果你使用Rhino,你可以使用JDBC api。
修改:添加了链接