因为最近自己在学习node.js,刚开始学。看到这篇文章挺有意思,介绍了一下node.js有助于理解基于事件驱动的回调,就翻译了一下。

英文原文: Understanding node.js


理解node.js


当我介绍node.js的时候,人们一般会有两种反应,要么很快就理解了要么会感到很困惑。如果你是第二种情况,这里我会尝试给你解释一下node。

  • 它是一个命令行工具,你下载一个tar形式的文件,编译并安装。
  • 它使你能够在终端敲 ‘node my_app.js’这样的命令就可以运行JavaScript程序。
  • JS通过V8 Javascript引擎执行(Javascript引擎是谷歌浏览器运行如此之快的原因)
  • Node 提供了访问网络和访问文件系统的API
“我是否能用它来做我在用ruby, python, php, java, ...时需要的一切呢?”

你说得对!但是Node不是独角怪兽,它不会过去主动帮你做工作。它只不过是一个工具,而且它不会完全取代你的常规工具,至少现在。

“那说重点吧”

好吧,当你需要在同一时间做几件事情时,Node总体上都是非常好的。你是否曾经写过一段代码并说道“我希望我的代码能并行运行”。好了,在node中除了代码,所有一切都是并行执行的。

“蛤??”

还是这样说,在node中除了你的代码,所有一切都是并行执行的。要理解这一点,你可以想象你是代码王国的国王,而node是你的仆从。一天的开始,一个仆人叫醒国王并问他需要做什么。国王给了仆人一个任务列表然后去睡了一会儿回笼觉,然后这个仆人把这些任务分配给自己的同伴,他们就开始工作了。一旦一个仆人做完了一个任务,他就排在王宫外面等着汇报。国王每次只让一个仆人进来,然后听他汇报。生活是美好的,因为国王的仆人们并行地执行所有的任务,但每次只报告一个结果,所以国王可以集中精力。

“这真是太棒了,但是我不喜欢这个比喻,能不能说点实在的?”

当然。一个简单的node程序看起来像这样:

const fs = require('fs');fs.readFile('treasure-chamber-report.txt', function(report) {console.log("oh, look at all my money: "+report);
});fs.writeFile('letter-to-princess.txt', '...', function() {console.log("can't wait to hear back from her!");
});

这段代码给了node两个任务,一个是读文件一个是写文件,然后你的代码就可以去休息了。一旦node完成一个任务,相应的回调函数就会被触发。但是同一时刻只能有一个回调函数被触发,其他的回调函数只能排成一列等待,直到这个回调函数执行完毕。另外我们不能保证这些回调函数被触发的顺序。


“那意思是我就不用担心代码在同一时刻访问同样的数据咯?”

你说对啦,这就是JavaScript单线程/事件循环设计之美。

“很好,但是我为什么要用它呢”

原因之一是效率,在一个web应用中,你的主要响应时间成本通常是执行所有数据库查询所需的时间总和。使用node的话,你可以同时执行所有查询。这样的话就可以把响应时间减少成执行最慢查询所需的时间。
       另外一个原因是JavaScript,你可以使用node在前端和后端之间共享代码。JavaScript也正在成为真正的通用语言。不论你过去使用的是Python,Ruby,java,php,…,你可能也会渐渐学习一些JS吧。
       最后一个原因是原始速度。V8一直在致力于推动这个星球上速度最快的动态语言解释器的发展。我想不出现在还有什么语言能像JavaScript那样被迅速的推进。除此之外,Node的I/O非常轻量级,使你可以尽可能充分地利用系统的I/O容量。


“那我能在node中获取DOM吗?”

很好的问题!不能,DOM是浏览器的东西,node的JS引擎(V8)和这堆东西是完全分开的。然而,也有人致力于实现将DOM作为一个node的一个模块。

“事件驱动编程是不是很难?”

这就要看你了。如果你已经学会了如何在浏览器中熟练使用ajax和用户事件,那么使用node就不是什么问题。

理解node.js(Understanding node.js)相关推荐

  1. 使用Keras,TensorFlow.js,Node.js和Firebase构建,训练和部署Book Recommender系统(第2部分)

    Welcome back to the second part of our recommender engine tutorial series. In the first part, you le ...

  2. node.js+mysql+node基于微信小程序的校园失物招领小程序 毕业设计-附源码072343

    微信小程序的校园失物招领系统 摘  要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,微信小程序的校 ...

  3. (附源码)node.js+mysql+node基于微信小程序的校园失物招领小程序 毕业设计072343

    微信小程序的校园失物招领系统 摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,微信小程序的校园 ...

  4. Node.js「一」—— Node.js 简介 / Node.js 模块 / 包 与 NPM

    本文为 Node.js 系列笔记第一篇.文章参考:nodejs 教程 -- 大地:<深入浅出 Node.js>:阮一峰 nodejs 博客 文章目录 一.Node 简介 1. 简单介绍 2 ...

  5. Node.js与io.js那些事儿

    去年12月,多位重量级Node.js开发者不满Joyent对Node.js的管理,自立门户创建了io.js.io.js的发展速度非常快,先是于2015年1月份发布了1.0版本,并且很快就达到了2.0版 ...

  6. node mysql 模块化_Node.js 模块系统

    Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node. ...

  7. 安装node.js 附带node.js以及npm初步认识 设置淘宝/npm镜像 命令

    1,安装: 下载地址:https://nodejs.org/en/download/ 0积分:https://download.csdn.net/download/weixin_42859280/12 ...

  8. [log.js]一个node端带文件路径和颜色的console.log

    log.js 开发node.js的时候,习惯用console.log老打印一些信息,然而node端的console.log并没有浏览器里的功能那么强. 比如显示当前console.log信息所在的代码 ...

  9. java创建node类型数据类型_[Java教程]js DOM Node类型

    [Java教程]js DOM Node类型 0 2015-12-18 16:00:08 DOM(文档对象模型)是针对HTML和 DOM可以将任何HTML或 以下面为例: My article Hell ...

最新文章

  1. docker 启动sqlserver_Docker mssql-server-linux:如何在构建期间启动.sql文件(来自Dockerfile)...
  2. 打开了悬浮窗权限但是没有_给你的手机添加“樱花雨”特效,打开手机樱花就满屏飘落,漂亮!...
  3. Cocostudio 1.6 下载地址
  4. mootools脚本框架下载
  5. 在linux系统下使用C语言操作临时文件
  6. Scala数组元素的修改update
  7. java中sc的快捷键,Windows下的SC命令参考
  8. 模板:什么是Traits
  9. 基于Redis的MQ中间件实现-目录
  10. 吴恩达机器学习【第五天】逻辑回归模型
  11. 值得关注!2021音视频人才成长路线图发布了
  12. python根据index合并_通过index和cols合并/联接/追加两个Pandas数据帧,其中包含多索引列...
  13. 热门用户推荐能否支持分类筛选?
  14. 计算机硬盘存绝密,教您创建自己的绝密磁盘
  15. 心系冬奥 翰墨传情 |当代书画名家为奥运加油书画推介展【姜萌篇】
  16. Eclipse切换回中文
  17. 修改XP登陆界面教程
  18. Python爬虫学习之scrapy框架(一)爬取豆瓣图书榜
  19. 【真北直播预报】让你的对话更有力,使十维宇宙不坠落
  20. 对标美国Lifelock公司,真我要做个人和企业身份信息保护的防火墙

热门文章

  1. centos 安装PHP7.0
  2. JS操作保存cookie(转载他人)
  3. 配置交换机端口聚合(思科、华为、锐捷)
  4. 鬼吹灯-漫谈大型网站的架构
  5. android系统优势 研究,Android系统关注度持续保持优势
  6. 洪水填充算法_Flood Fill (洪水填充、泛洪填充、油漆桶)算法Java循环实现(BFS方式,非递归)...
  7. Chrome DevTools的Network面板
  8. [译]JavaScript async / await:好处、坑和正确用法
  9. 【PHP发展史】PHP5.2 到 PHP5.6 中新增的功能详解
  10. 精通SpringBoot——第二篇:视图解析器,静态资源和区域配置