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

标签 javascript serverside-javascript jaxer

我刚开始尝试 Aptana Jaxer我的下一个项目的服务器端 javascript 引擎。我对此几乎没有疑问

  • 通过使用服务器端 JS,我们是否可以在不使用任何服务器端语言(如 C#、java 等)的情况下实现整个 Web 应用程序。或者服务器端 JS 位于 Web 服务器和其他语言堆栈之间。
  • 这真的是更好的方法吗?
  • 有什么优点和缺点?
  • 这在性能方面如何运作良好?
  • 是否有任何仅使用服务器端 JS(没有其他语言)的实时实现(公共(public)网站)?
  • Aptana jaxer(开源)上有哪些替代方案?
  • 我们如何实现和维护数据库事务?我们可以在服务器端 JS 中做到这一点吗?
  • 是否可以在服务器端 JS.. 中开发 RESTFul 和 SOAP 服务?

  • 我知道这太长了(而且问题很幼稚)。我只是希望有人在实现服务器端 JS 时已经遇到了所有这些。

    编辑:

    根据 Matthew 和 Ken 的评论,我对问题 进行了一些澄清这真的是更好的方法吗?

    这就是我想问的。。

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

    最佳答案

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

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

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

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

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

    有什么优点和缺点?

    优点:

  • 快速发展 :在 Myna 中,您只需在 webroot 中创建扩展名为 .sjs 的文件。这意味着您可以创建一个编辑-保存-刷新浏览器循环,调试/调整代码非常快。
  • 简单的 JSON :让 JS 支持服务器端意味着移动复杂的结构非常容易
  • 共享码 : 如果需要在服务器端和浏览器端执行相同的功能,可以使用相同的代码
  • 动态 ORM :静态类型编译语言使得在运行时很难改变对象。这通常意味着必须提前定义 ORM。在 Myna 中构建 ORM 就这么简单
    var manager =new Myna.DataManager("DataSource name").getManager("table name");
    

    您将获得一个可以执行所有基本 CRUD 操作的对象,而无需明确定义数据库表。作为另一个示例,您可以插入包含表单帖子中所有匹配值的行:
    manager.create($req.data);
    
  • 函数式编程 :如果您已经开始使用高级 JavaScript 功能,那么您将欣赏它们在服务器端的帮助。由于服务器端环境一致,因此可以安全地使用 Array Extras 等高级功能。 , generators and iterators , destructuring assignments , 和 E4X

  • 缺点:
  • 工具 :C# 和 Java 等静态类型语言具有出色的 IDE 和开发人员工具。像 JS 这样的动态语言还没有工具支持。我个人发现样板代码的大量减少和繁琐的类型转换弥补了这一点,但是如果您在 IDE 中进行了大量开发,这仍然是一个很大的缺点。如果您当前正在使用 IDE,请考虑使用 jedit用于动态语言
  • 成熟度/标准化 :Serverside JS还是一个新范式,玩家众多,没有明确的赢家。 ECMA 没有任何针对服务器端 JS 的标准。正如布兰登的回答中提到的,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.DatabaseMyna.Table提供数据库中立的元数据访问以及表的创建和修改。
  • 八哥的 Query对象支持 maxRows、分页、SQL 参数、自定义行处理程序、查询查询、缓存等
  • 八哥的 DataManager对象支持运行时 ORM 对象创建

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

    REST 和 SOAP 支持是特定于平台的功能。八哥的 WebService对象支持以下协议(protocol):
  • 肥皂
  • XML-RPC
  • JSON-RPC
  • 直拨
  • JSON-MYNA
    (一个简单的协议(protocol),使用标准格式的帖子并返回 JSON。易于从浏览器使用)

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

    调试

    传统的断点调试是服务器端真正的挑战。尽管 Rhino 支持调试器钩子(Hook),但在无状态 Web 应用程序中使用这些钩子(Hook)会非常复杂。我个人甚至不使用断点调试器,即使它们可用(例如 firebug)。相反,我更喜欢伐木。

    在八哥,
     Myna.log(type,label,detail)
    

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

    关于javascript - 服务器端javascript实现的优缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1476967/

    相关文章:

    PHP 表单提交而不刷新

    javascript - 为每个元素运行一个函数

    javascript - 来自node.js服务器端: photo upload to facebook

    node.js - Node.js 如何处理连接?

    javascript - Azure documentdb如何开发服务端?

    php - 和贾克斯有什么关系?

    javascript - jQuery 自定义输入触发器复选框

    javascript - 如何在 JavaScript : ASP. NET Core 中使用模型数据

    performance - 有人在生产中使用Jaxer吗?