声明:这篇文章绝不是一篇讨论 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编程。 Ruby on Rails(简称“ Rails”)是一个使用Ruby编程语言编写的免费开放源代码Web开发框架。 Rails和...
It only will provide a structure, inspired on Ruby on Rails, that will allow you to organise better your projects, initialise your own or third party libraries, call in a easy way your models, ...
这是一个用 Ruby on Rails 编写的简单微博。 Ruby版本:2.0.0 导轨版本:4.0.2 运行应用程序的步骤: 1)进入根目录 2)运行“捆绑安装” 3) 如果您在任何 Linux 发行版上本地运行,请运行“sudo apt-get ...
初始应用程序使用ruby on rails,为缓冲区创建一个克隆,我们可以在其中创建,连接我们的Twitter帐户并计划在特定时间发布的推文 该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: ...
node.js能干什么.既然NodeJS什么都能做,那为什么还要用JAVA.zip
如果要更改Ruby或Rails版本,请编辑 初步指示 要求: 如果您使用的是Windows) 端口转发: Vagranfile声明了一些端口转发,因此您可以从外部访问mysql,postgresql并浏览您的应用程序: machine . vm . network ...
:fire: 设计精美的管理面板(Nodejs、Laravel、Java Spring、Ruby On Rails、Django、Asp.net Core ...) :motor_scooter: :motor_scooter: :motor_scooter: :vertical_traffic_light: Vespa 不是 CMS 或博客平台,...
ansible-rails:使用Ansible部署Ruby on Rails-使用Lets Encrypt,Sidekiq,PostgreSQL,nginx和puma
2019最新nodeJS从入门到大神.txt----------百度云盘下载地址
nodejs入门到实战(一、二、三)源代码,对应分类:https://blog.csdn.net/zengraoli/category_10327904.html 中的文章 nodejs入门到实战(一)、nodejs入门到实战(二)、nodejs入门到实战(三)
centos 中默认安装的python是2.4的版本,因为新版的rails需要提供nodejs的相关支持,需要更新python,更新文章可以直接移步到这个链接 http://www.tomtalk.net/wiki/Python 代码如下: yum install -y bzip2* #...
nodejs初级教程
NodeJS
install nodejs # yum install httpd \httpd-devel \openssl-devel \zlib-devel \mysql-server \mysql-devel \gcc \gcc-c++ \curl-devel\libyaml 2 Ruby 1.9.2, RubyGems # cd ~/source/ # wget ftp://ftp.ruby-...
GOV.UK Rails样板 先决条件 Ruby 2.7.1 PostgreSQL NodeJS 12.13.x 纱线1.12.x 在开发中设置应用 运行bundle install以安装gem依赖项 运行yarn安装节点依赖项 运行bin/rails db:setup设置数据库开发和测试模式,并...
今天小编就为大家分享一篇对mac下nodejs 更新到最新版本的最新方法(推荐),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
节点js NodeJS示例项目
,nodEjs ,nodEjs ,nodEjs ,nodEjs ,nodEjs ,nodEjs ,nodEjs ,nodEjs ,nodEjs
nodeJS入门搭配原生Mysql实现个人博客,模块化开发,具体实现参考源码
iot-nodejs, 使用nodejs连接到IBM的客户端库和示例 node.js-客户端库node.js 客户机用于简化与Things平台的交互。 以下库包含有关使用 nodejs ibmiotf node 与组织内的设备和应用程序进行交互的说明和指导。客户端库...