代码之家  ›  专栏  ›  技术社区  ›  RameshVel

服务器端javascript实现的优缺点?

  •  16
  • RameshVel  · 技术社区  · 15 年前

    我刚开始做实验 Aptana Jaxer 我的下一个项目的服务器端javascript引擎。我对此没有什么疑问

    • 通过使用服务器端JS,我们可以在不使用任何服务器端语言(如C#、java等)的情况下实现整个web应用程序。或者服务器端JS位于web服务器和其他langauge堆栈之间。

    • 这真的是更好的方法吗??

    • 这在性能方面如何运作良好?

    • 是否存在仅使用服务器端JS(无其他语言)的实时实现(公共网站)?

    • AptanaJaxer(开源)有哪些替代方案??

    • 我们能如何实施&Maitan db事务?我们可以在服务器端JS中这样做吗。。?

    • 是否可以在服务器端JS中开发RESTFul和SOAP服务。。??

    我知道这太长了(和天真的问题)。我只是希望有人在实现服务器端JS时已经遇到了所有这些问题。

    编辑:

    根据马修;Ken评论道,我已经澄清了这个问题 这真的是更好的方法吗??

    这就是我想问的。。

    这真的比使用服务器端语言(假设是c语言)更好吗?我们如何将其与网站的c语言实现(性能、语言特性)进行比较?? 在服务器端单独使用JS,或者在其他语言堆栈和Web服务器之间的中间层使用JS,哪种方法更好??

    3 回复  |  直到 11 年前
        1
  •  19
  •   Community chadoh    7 年前

    我是的开发者 Myna (www.mynajs.org),一个基于Rhino和Java的开源服务器端JS平台。我将讨论与Myna相关的问题,但其中许多要点通常适用于服务器端JS:

    在Myna中,可以用JS编写整个应用程序。Myna已经包含了用于数据库访问、对象关系映射、crytogrophy、OpenID等的API。

    它真的比c#/Java更好吗?

    对于基于Rhino的服务器,只要需要,就可以随时使用Java。您可以轻松地安装开源/商业/手工编码的Java库,然后从JS编写脚本。这意味着您可以获得JS的快速开发,但可以保持Java平台的优势

    优点和缺点是什么?

    赞成的意见:

    • 快速发展 :在Myna中,您只需在webroot中创建扩展名为.sjs的文件。这意味着您可以创建一个编辑保存刷新浏览器周期,该周期对于调试/调整代码来说非常快。

    • Easy JSON :让JS支持服务器端意味着移动复杂结构非常容易

    • :如果需要在服务器和浏览器上执行相同的功能,可以使用相同的代码

    • 动态ORM :静态类型的编译语言很难在运行时更改对象。这通常意味着必须提前定义ORM。在Myna建筑中,ORM就像

      var manager =new Myna.DataManager("DataSource name").getManager("table name");
      

      您得到的对象可以执行所有基本CRUD操作,而无需显式定义DB表。另一个示例是,您可以插入一行,其中包含表单帖子中的所有匹配值:

      manager.create($req.data);
      
    • 函数式编程 :如果您已经开始使用高级JavaScript功能,那么您将感激它们在服务器端的帮助。由于服务器端环境的一致性,因此使用诸如 Array Extras , generators and iterators , destructuring assignments E4X

    欺骗:

    • 工具 :C#和Java等静态类型语言具有优秀的IDE和开发工具。像JS这样的动态语言还没有工具支持。就我个人而言,我发现样板代码的大量减少和繁琐的类型转换弥补了这一点,但如果您一直在IDE中进行大量开发,这仍然是一个很大的缺点。如果当前使用IDE,请考虑使用 jedit

    • 成熟度/标准化 :服务器端JS仍然是一个新的范例,有很多玩家,但没有明确的赢家。ECMA没有服务器端JS的任何标准。正如布兰登在回答中提到的那样 CommonJS 该集团正试图形成服务器端JS标准,Myna通过 Narwhal

    这在性能方面如何运作良好?

    在原始计算速度方面,很少有动态语言能够与C#和Java等静态类型编译语言相匹配。话虽如此,这真的没关系。应用程序中计算密集型的任何部分都应该用Java编写,或者使用现有的Java库。例如,我不建议任何人用JS编写数据库。对于现实世界中的web应用程序/SOA服务,速度减慢的主要原因不是原始的计算速度,而是低效的代码,尤其是数据库访问。Myna通过做以下事情来帮助实现这一点:

    • 内部缓存编译的JS脚本
    • 查询和输出片段缓存
    • 数据库连接池
    • 自动ETag哈希支持
    • 分析工具
    • 元数据的延迟加载

    如果您是指“一组可以反转或提交的SQL语句”中的事务,那么Myna还不支持事务。如果有足够的兴趣,我愿意实施这项计划。

    如果您的意思是“服务器端JS有什么样的数据库支持?”那么答案取决于平台。Myna平台提供以下数据库功能:

    • 一个基于web的管理应用程序,您可以在其中定义“数据源”,即数据库连接信息。然后可以按名称查询这些数据源。Myna包括用于H2、MySQL、microsoftsqlserver和Postgresql的JDBC驱动程序,但是可以使用任何JDBC或ODBC数据源
    • Myna.Database Myna.Table
    • 八哥 Query 对象支持maxRows、分页、SQL参数、自定义行处理程序、查询查询、缓存等
    • DataManager 对象支持运行时ORM对象创建

    是否可以在服务器端JS中开发RESTFul和SOAP服务。。??

    REST和SOAP支持是特定于平台的特性。八哥 WebService 对象支持以下协议:

    • XML-RPC
    • JSON-RPC
    • 直接分机
    • JSON-MYNA (一个简单的协议,使用标准格式POST并返回JSON。易于从浏览器使用)

    Myna还了解PUT和DELETE请求方法,并以文本和二进制形式提供对请求正文内容的访问,因此可以以特定于应用程序的方式处理这些RESTful方法。

    传统的断点调试在服务器端是一个真正的挑战。尽管Rhino支持调试器钩子,但从无状态web应用程序中使用这些钩子将非常复杂。就个人而言,我甚至不使用断点调试器,即使它们可用(例如firebug)。相反,我更喜欢日志记录。

    在Myna,

     Myna.log(type,label,detail)
    

    将产生一个低优先级线程,将HTML日志消息写入Myna的日志数据库。然后可以通过Myna管理员搜索这些日志。日志还记录时间戳和经过的毫秒,以便进行分析。dump(obj)还可以用来表示任何对象的HTML表。Myna还使用堆栈跟踪、源代码上下文和请求详细信息记录所有未处理的异常。在dump()、log()和默认错误处理程序之间,调试Myna代码没有太大困难

        2
  •  12
  •   Matthew Crumley    15 年前

    通过使用服务器端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好得多,我从来没有真正喜欢过PHP)。

    优点和缺点是什么?

    优点:

    • 服务器端和客户端编程只需要一种语言。
    • 共享代码的可能性,比如表单验证。Jaxer允许您在客户机、服务器或两者上运行脚本。
    • 您可以使用JavaScript编程(假设您喜欢这种语言)。

    缺点:

    • 许多框架都是实验性的/不是很成熟。
    • 你必须用JavaScript编程(假设你不喜欢这种语言)。

    这在性能方面如何运作良好?

    是否存在仅使用服务器端JS(无其他语言)的实时实现(公共网站)?

    我不知道有任何大型网站使用JavaScript,但可能有一些。

    AptanaJaxer(开源)有哪些替代方案??

    维基百科有一个 large list of options ,但它没有多少有用的信息。在成熟度和规模方面有很多选择。

    • 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有什么具体的支持,但应该有 可能的 .

        3
  •  6
  •   Brandon    14 年前

    作为前言,我在日常工作中使用SSJ。我们在SpiderMonkey上运行了一个相当大的网站(就复杂性和页面浏览量而言)。在我有经验的地方,我会补充马修的优秀答案。

    这真的比使用服务器端语言更好吗(假设c#)

    “更好” 这取决于你想用它做什么。JavaScript本身有一些很棒的特性,也有一些非常糟糕的特性。如果你对开发JS(客户机或服务器)很认真,我不能高度推荐你观看道格拉斯·克罗克福德(Douglas Crockford)的演讲, Javascript: The Good Parts 如果你还没有。他在清理积垢方面做得非常出色,他是一个优秀的演说家。

    我发现SSJS世界目前最缺乏的是成熟度。我不熟悉C#,但JavaScript没有成熟的标准库,也没有成熟的包分发方法。对我来说,这是一个很大的难题。

    这就是说,请注意 CommonJS 组他们正在努力定义那些确切的东西。此外,jaxerapi文档列出了该框架中包含的内置组件。

    这在性能方面如何运作良好?

    JavaScript本身不是一种速度慢的语言,也不是一种特别快的语言。正如Matthew指出的,它应该可以与您将使用的任何其他脚本语言进行比较。浏览器供应商之间的战争,看看谁可以建立最快的浏览器将受益于SSJS人群以及。

    V8团队在其引擎中构建的分代垃圾收集就是一个很好的例子。停止虚拟机以从堆中释放无法访问的对象并回收它们的内存可能会有点慢,但它们通过减少垃圾回收器运行时需要检查的对象数量来缓解这一问题。

    我们能如何实施&维护数据库事务?我们可以在服务器端JS中这样做吗。。?

    Jaxer似乎有MySQL和SQLite数据库API。正如Matthew提到的,如果您使用Rhino,那么您可以使用JDBCAPI。

    编辑