我刚刚开始为我的下一个项目试验Aptana Jaxer服务器端javascript引擎.我对此几乎没有任何疑问
通过使用服务器端JS,我们可以实现整个Web应用程序而无需使用任何服务器端语言(如C#,java等).或者服务器端JS位于Web服务器和其他语言堆栈之间.
这真的是一个更好的方法吗?
什么是优点和缺点?
这在性能方面如何运作良好?
有没有实时实现(公共网站)只使用服务器端JS(没有其他语言)?
有什么比Aptana jaxer(开源)可用的替代品?
我们如何实现和维护数据库事务?我们可以在服务器端JS中做到吗?
是否有可能在服务器端JS中开发RESTFul和SOAP服务.??
我知道这太长了(天真的问题).我只是希望有人在实现serverside JS时已经遇到过这些问题.
编辑:
根据Matthew&Ken的评论,我在这个问题上添加了一些清晰度它真的是一个更好的方法吗?
这是我打算问的..
它是否比使用服务器端语言(假设c#)更好的方法,我们如何将它与网站的c#实现(性能,语言功能)进行比较?哪一个是更好的方法,在服务器端单独使用JS或在其他语言堆栈和网络服务器之间的中间层使用JS?
我是Myna(www.mynajs.org)的开发人员,这是一个基于Rhino和Java的开源服务器端JS平台.我将解决与Myna相关的问题,但其中许多要点一般适用于服务器端JS:
通过使用服务器端JS,我们可以实现整个Web应用程序而无需使用任何服务器端语言(如C#,java等).或者服务器端JS位于Web服务器和其他语言堆栈之间.
在Myna中,可以用JS编写整个应用程序.Myna已经包含了用于数据库访问,对象关系映射,crytogrophy,OpenID等的API.
它真的比c#/ Java更好吗?
使用基于Rhino的服务器,只要需要,就可以轻松下载到Java.您可以轻松安装开源/商业/手动编码的Java库,然后从JS编写脚本.这意味着您可以快速开发JS,但保持Java平台的优势
有哪些优点和缺点?
优点:
快速开发:在Myna中,您只需使用.sjs扩展名在webroot中创建文件.这意味着您可以创建一个编辑 - 保存 - 刷新浏览器周期,非常快速地调试/调整代码.
Easy JSON:拥有JS支持服务器端意味着移动复杂的结构非常容易
共享代码:如果需要在服务器和浏览器上执行相同的功能,则可以使用相同的代码
动态ORM:静态类型编译语言使得在运行时很难改变对象.这通常意味着必须事先定义ORM.在Myna建筑中,ORM就像
var manager =new Myna.DataManager("DataSource name").getManager("table name");
您将获得一个可以执行所有基本CRUD操作的对象,而无需显式定义数据库表.作为另一个示例,您可以插入一个包含表单帖子中所有匹配值的行:
manager.create($req.data);
功能编程:如果您已经开始使用高级JavaScript功能,那么您将会感谢它们在服务器端的帮助.由于服务器端环境一致,因此使用诸如Array Extras,生成器和迭代器,解构分配和E4X等高级功能是安全的.
缺点:
工具:静态类型语言(如C#和Java)具有出色的IDE和开发人员工具.像JS这样的动态语言还没有工具支持.就个人而言,我发现样板代码和繁琐的类型转换的大量减少弥补了这一点,但如果你在IDE中进行了大量的开发,这仍然是一个很大的缺点.如果您当前正在使用IDE,请考虑将jedit用于动态语言
成熟度/标准化:Serverside JS仍然是一个新的范例,有很多玩家,没有明确的赢家.ECMA对于服务器端JS没有任何标准.正如Brandon的回答中所提到的,CommonJS小组正试图形成服务器端JS标准,而Myna通过Narwhal提供实验性CommonJS支持
这在性能方面如何运作良好?
在原始计算速度上,很少有动态语言可以匹配静态类型的编译语言,如C#和Java.话虽如此,这无关紧要.应用程序中计算密集的任何部分都应该用Java编写,或者使用现有的Java库.我不建议任何人在JS中编写数据库.对于真实的Web应用程序/ SOA服务,减速的主要原因不是原始计算速度,而是低效的代码,尤其是数据库访问.通过以下方式帮助Myna:
内部缓存已编译的JS脚本
内部使用缓存的预准备语句进行数据库事务
查询和输出片段缓存
数据库连接池
自动ETag哈希支持
分析工具
延迟加载元数据
我们如何实现和维护数据库事务?我们可以在服务器端JS中做到吗?
如果您的意思是"可以撤消或提交的一组SQL语句"中的事务,那么Myna还不支持事务.如果有足够的兴趣,我愿意实施这个.
如果你的意思是"服务器端JS有什么样的数据库支持?" 然后答案是平台依赖的.Myna平台提供以下数据库功能:
基于Web的管理应用程序,您可以在其中定义"数据源",即数据库连接信息.然后,您可以按名称查询这些数据源.Myna包含用于H2,MySQL,Microsoft SQL Server和Postgresql的JDBC驱动程序,但可以使用任何JDBC或ODBC数据源
Myna.Database和Myna.Table提供数据库中立的metdata访问以及表创建和修改.
Myna的Query对象支持maxRows,分页,SQL参数,自定义行处理程序,查询查询,缓存等
Myna的DataManager对象支持运行时ORM对象创建
是否有可能在服务器端JS中开发RESTFul和SOAP服务.??
REST和SOAP支持是特定于平台的功能.Myna的WebService对象支持以下协议:
肥皂
XML-RPC
JSON-RPC
Ext Direct
JSON-MYNA(一种使用普通表单帖子并返回JSON的简单协议.易于在浏览器中使用)
Myna还了解PUT和DELETE请求方法,并以文本和二进制形式呈现对请求正文内容的访问,因此可以以特定于应用程序的方式处理这些RESTful方法.
调试
传统的断点调试是服务器端的真正挑战.虽然Rhino支持调试器挂钩,但是使用来自无状态Web应用程序的挂钩非常复杂.就个人而言,我甚至没有使用断点调试器,即使它们可用(例如,firebug).相反,我更喜欢伐木.
在Myna,
Myna.log(type,label,detail)
将生成一个低优先级线程,以便将一条HTML日志消息写入Myna的日志记录数据库.然后可以通过Myna管理员搜索这些日志.日志还记录用于分析目的的时间戳和经过的毫秒数.Myna.dump(obj)也可用于呈现任何对象的HTML表格表示.Myna还使用堆栈跟踪,源代码上下文和请求详细信息记录所有未处理的异常.在dump(),log()和默认错误处理程序之间我调试Myna代码没什么困难
通过使用服务器端JS,我们可以实现整个Web应用程序而无需使用任何服务器端语言(如C#,java等).
尽管许多服务器端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:
服务器端和客户端编程只需要一种语言.
共享代码的可能性,例如表单验证.Jaxer允许您在客户端,服务器或两者上运行脚本.
你可以用JavaScript编程(假设你喜欢这种语言).
缺点:
许多框架都是实验性的/不太成熟.
你必须用JavaScript编程(假设你不喜欢这种语言).
这在性能方面如何运作良好?
性能应与其他脚本语言大致相当.
有没有实时实现(公共网站)只使用服务器端JS(没有其他语言)?
我不知道任何使用JavaScript的大型网站,但可能有一些.
有什么比Aptana jaxer(开源)可用的替代品?
维基百科有很多选项,但它没有太多有用的信息.有很多选择,成熟度和大小范围广泛.
以下是我熟悉的一些(不同程度)
Helma - 基于Rhino(Java)的框架,具有活动记录.
Helma NG - 下一代Helma(实验改写,正在积极开发中).
Phobos - 在NetBeans中有很好的支持.
v8cgi - 小而简单,使用谷歌的V8引擎,可能还没有生产就绪.
Jaxer - 使用DOM实现在Spidermonkey上运行,因此您可以使用jQuery或Prototype等框架来操作页面.在Aptana Studio中有良好的IDE支持.
我们如何实现和维护数据库事务?我们可以在服务器端JS中做到吗?
基于Rhino的框架允许您使用Java类,因此您可以获得完整的JDBC支持.我没有使用过Jaxer的数据库库,所以我对它的功能一无所知.
是否有可能在服务器端JS中开发RESTFul和SOAP服务.??
RESTful API不应该是任何问题.我不知道对SOAP的任何具体支持,但它应该是可能的.
作为序言,我在日常工作中使用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.
编辑:添加链接