【问题标题】:What are some advantages to using a Javascript-based server over a non-Javascript server?与非 Javascript 服务器相比,使用基于 Javascript 的服务器有哪些优势?
【发布时间】:2012-06-01 19:48:14
【问题描述】:

免责声明:这个问题有点开放。我还希望回复部分基于开发者的偏好。

我最近一直在对 Express.js(通过 Node.js 耦合)进行一些研究,我正在努力寻找如何将这些技术中的任何一种融入我当前的网站开发工作流程中。最近我一直在使用 Wordpress 或 Ruby on Rails,前者将在 Apache 上运行,后者将在它自己的专有服务器上运行(我假设)。

现在也许我只是不理解某些东西,但我看不到获得基于 Javascript 的框架/服务器支持的优势。如果将这部分作为我的工作流程有明显的优势,它们会是什么?我还没有找到任何方法来适应(比如说)Rails 应用程序或 Wordpress 站点。有人可以为我指明在我已经使用的技术之上实施这些技术的更好帮助的方向吗?

最后一个问题,如果有人在浏览器中禁用了 Javascript,会发生什么?基于 Javascript 的服务器将如何反应(如果有的话)?

【问题讨论】:

  • 服务器上运行的Javascript与浏览器上运行的javascript无关。
  • 您很可能不会将它放入 Rails 应用程序或 WP 站点——它们不在 JS 服务器上运行。如果 JS 服务器比您现有的服务器端技术做得更好、更快等,您可以将 JS 服务器与另一个服务器端应用程序结合使用。 wBrowser JS 没有以任何方式连接到服务器 JS —— 什么机制可以解决这个问题?

标签: javascript ruby-on-rails wordpress node.js express


【解决方案1】:

有两个很大的区别:

事件循环

Node.js 与通常的 Apache 概念有点不同,因为它处理连接的方式。 Node 没有同步连接,而是使用事件循环来进行非阻塞操作。请注意,这不是 Javascript 独有的,还有基于 C 和 Python 的框架也支持类似的事件循环方法,但是在 Javascript 中,这可能是最自然的感觉,因为这就是自引入以来 JS 的工作方式。

据推测,这应该使您能够处理更多并发客户端。但是,它没有像常规阻塞解决方案那样在现实世界中暴露那么多,因此这种方法不像大多数当前实现那样成熟。实际的性能差异值得怀疑,因为它取决于应用程序的确切要求。

代码共享

这一点与之前的区别相比争议要小得多,但本质上如果您在客户端和服务器上使用相同的语言,您可以重用大量代码,而不必重写您的数据结构等多种语言,为您节省大量开发时间。但是,你要明白服务器端 JS 的概念和你在浏览器上所知道的不同,比如你没有 jQuery 或 Prototype 的动态 JS,但它的结果和用例更类似于 PHP被广泛用于。

【讨论】:

  • 让我补充一点,Node.js 的一大优点(我不知道 Express)是开发人员不必担心为高效和安全的多线程编写代码,因为没有线程。
【解决方案2】:

使用 Javascript 作为服务器端语言的主要优点是您可以用一种语言编写整个系统。

这在以下方面具有优势:

  • 开发者的学习曲线和心理情境切换
  • 并且还为在两个环境之间共享代码提供了一些可能性。

但是,由于多种原因,最后一点并没有听起来那么有用,这就是缺点所在:

  • 实际上不能共享太多代码,因为这两个环境实际执行的操作不同。可能是一些验证代码,所以您知道您在客户端和服务器上执行相同的检查,可能还有一些实用程序函数,但仅此而已。
  • 您使用的库在两者之间也将完全不同:jQuery 仅适用于客户端,而 Node 具有特定于服务器的库。
  • 所以作为一个开发者,你还是需要在不同环境之间进行心理上下文切换,因为这两个环境是不同的。他们可能共享一种语言,但他们的运作方式不同,他们所做的事情也不同。事实上,在两者之间共享语言实际上会使上下文切换变得更加困难,这可能会导致错误。
  • 最后,值得牢记的是,虽然 Node 受到了开发者社区的广泛关注,但它仍然是新事物并且发展迅速:如果您是一家考虑将其作为开发平台的企业,它可能还不是很成熟足够稳定,可以作为主要项目的基础。

【讨论】:

  • 值得一提的是,在游戏等应用程序中,验证和状态计算是代码的主要部分,共享这些内容的能力非常宝贵。但是,总的来说,我在节点的这一方面并没有发现太多优势。
  • 虽然,有很多库为客户端 JS 和 Node 提供等效或类似的库,例如用于模板、数据存储、推送通知等。
猜你喜欢
  • 2011-06-14
  • 1970-01-01
  • 2011-12-11
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2018-10-18
  • 2016-08-04
相关资源
最近更新 更多