`

为什么我们要从 NodeJS 迁移到 Ruby on Rails

 
阅读更多

声明:这篇文章绝不是一篇讨论 NodeJS 和 Ruby on Rails 孰优孰略的檄文。 它描述的只是我们做决策过程中的一些思考、决策背后的原因。 两种框架都非常优秀,都出色的完成了它们的设计初衷,这也是为什么我们部分的模块仍然运行在NodeJS上的原因。

我是NodeJs的大粉丝,认为这是一项让人非常兴奋的技术,相信它会变的越来越流行。 我对这项技术非常的欣赏——尽管我们最近把Targeter App从NodeJS迁移到了Ruby on Rails。

我们当时使用NodeJS开发它的原因很简单。 我有一个程序包,能很快的将我们的应用弄上线(我们花了54小时做这个事情),相比起Ruby,我更常使用的是JavaScript。 因为我们的技术架构牵涉到MongoDB,我的这些特长只有在NodeJS环境里才会有意义。 然而,随着应用规模的增长,我认识到,选择NodeJS来实现这个应用是个错误的选择。

下面让我来概述一下其中的原因。

NodeJS很适合做那些有大量短生命期请求的应用。 对于传统的CRUD应用,它也很好,但不是非常的理想。 在PHP,Ruby,Python语言里都有很成熟、优化的很好的框架来处理这种应用。 NodeJS里的所有东西都异步执行的理念对于CRUD应用来说没有任何效果。 其它语言里的流行的框架能提供非常好的缓存技术,你所有的需求都能满足,包括异步执行。

NodeJS是一种非常年轻的技术框架,它的周边程序库都不是很成熟。 我说这些并没有任何对那些代码捐赠者冒犯的意思,他们很优秀,开发出来很多优秀的程序库。 然而,大部分程序库需要改进,而NodeJS的这种快速成长的环境意味着每一版升级中都带有大量的变化; 当你使用一种前沿技术时,你十分有必要尽快的紧跟最新的版本。 这给创业型的企业带来了很多的麻烦。

另外一个原因是关于测试。 NodeJS里的测试框架还不错,但跟Django或RoR平台上的相比还是差一些。 对于一个每天都有大量的代码提交、并且在一两天内就要发布的应用来说,程序不能出问题是至关重要的, 否则你为此辛苦的努力变得得不偿失。 没有人愿意花一天的时间改一些弱智的bug。

最后一点,我们需要的是一种能缓存一切的东西,并且要尽快的实现。 尽管我们的应用在增长,每秒钟有上万次的hits,但绝不会出现很大量的访问请求;这不是一个聊天程序! 主程序最多时也就达到1000RPS,这样的负载对于Ruby on Rails和Nginx来说算不了什么。

如果你现在还在读这篇文章,那你已经看到了我所有要说的了, 你也许非常坚持的想知道我们的应用什么地方还在使用NodeJS。 是这样的,我们的应用由两部分组成。 一是界面,用户看到的这部分,二是负责报表管理的部分,以及做日志的功能。 后者是NodeJS的一个最佳使用场景,存在有大量的短周期的请求。 这部分的动作需要尽快的执行完成,甚至要在我们的数据推送还没有完成之前。 这很重要,当请求执行还未结束,浏览器继续等待响应结束,这会影响用户使用体验。 NodeJS的异步特性救了我们。 数据要么被存入数据库,要么被处理掉,当请求一旦执行完成,浏览器就可以开始做其它重要的事情了。

本文英文原文链接:Why we moved from NodeJS to RoR

分享到:
评论

相关推荐

    ruby on rails 安装手记

    Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在使开发过程更加高效、简洁。本篇将详细讲解如何进行Ruby on Rails的安装。 首先,安装Ruby on ...

    HerokuRailsBlog:使用简单的博客应用程序在 Heroku 上测试 Ruby on Rails

    这是一个用 Ruby on Rails 编写的简单微博。 Ruby版本:2.0.0 导轨版本:4.0.2 运行应用程序的步骤: 1)进入根目录 2)运行“捆绑安装” 3) 如果您在任何 Linux 发行版上本地运行,请运行“sudo apt-get ...

    Node.js-一个基于Koa2构建的类似于Rails的nodejs开源项目

    这个开源项目被称为"embbnux-kails",显然受到了Ruby on Rails的启发,Rails是Ruby语言的一个著名框架,以其“约定优于配置”(Convention over Configuration, CoC)和“开发人员快乐原则”(developer happiness)...

    linux redmine

    Linux Redmine 是一款基于 Ruby on Rails 开发的项目管理软件,专为软件开发团队设计,提供了问题跟踪、项目管理、时间追踪以及文档管理等功能。它支持多种版本控制系统,如Git和Subversion,与各种开发工具无缝集成...

    后端开发教程.docx

    - 部署流程:了解如何将应用从开发环境顺利迁移到生产环境,包括版本控制、构建工具的选择等。 综上所述,后端开发不仅涉及到编程语言和技术的选择,还需要掌握数据库管理、API设计、安全性措施以及测试与部署等...

    GoogleMaps-API-Rails-Demo:使用 InfoWindows 单击创建标记。 AjaxJsonjsSassRails

    自述 访问演示本身 / 需要 Rails 版本 4 之后你应该安装节点js sudo apt-get 安装 nodejs 安装所有宝石捆绑安装迁移 sqlite 数据库rake db:migrate RAILS_ENV=development 编译资产捆绑 exec rake 资产:预编译

    node.js入门手册:那些最流行的web开发框架 (1).docx

    **CompoundJS**(原名 RailwayJS)是一个类似于 Ruby on Rails 的 MVC Web 框架,兼容 Express 和 Connect。它为开发者提供了一套完整的工具集,包括路由管理、视图渲染等功能。 #### 十二、Crux **Crux** 类似于 ...

    google-visioner:RoR + React Google Vision API消费者示例

    接下来,执行数据库迁移/架构设置: bundle exec rake db:setup 先决条件 图形魔术师 brew install graphicsmagick PostgreSQL brew install postgresql nodejs和yarn brew install node brew install yarn 启动...

    gitlab:gitlab原始码建立-源码搭建

    首先,我们需要确保系统环境满足GitLab的最低需求。GitLab 支持多种操作系统,包括Ubuntu、CentOS、Debian等Linux发行版,这里以Ubuntu为例。确保你的系统是64位的,并更新到最新版本: ```bash sudo apt update ...

    lxd-images:用于本地开发环境的LXD图像集合

    Rails框架是Ruby最著名的应用,常用于快速开发Web应用。 **Python** Python是一种高级编程语言,具有简洁的语法和广泛的标准库,适用于各种任务,包括Web开发、科学计算、自动化和数据分析。 **Ember.js** Ember....

    paltry:Paltry便携式环境

    Paltry便携式环境是一个精心设计的开发工具集合,旨在为开发者提供一个可随身携带的工作环境。它整合了多种编程语言、开发工具和版本控制系统,使得开发者无论在何处都能快速投入工作,无需担心系统配置问题。这个...

Global site tag (gtag.js) - Google Analytics