博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
了解node.js
阅读量:5109 次
发布时间:2019-06-13

本文共 2305 字,大约阅读时间需要 7 分钟。

转载自

 

当我向人们介绍时,通常会得到两种反应,一种人马上就能了解,另一种则是非常困惑。

如果你是第二种人,请看一下我对node的解释:

  • 它是一个命令行工具。你可以通过下载源码压缩包,编译并安装;
  • 它能让你在你的终端上运行JavaScript程序,只需要输入"node my_app.js";
  • (Google Chrome的脚本引擎,保证了Chrome的快速运行)负责执行JS文件;
  •  Node 提供了一个JavaScript API用于访问网络和文件系统。

“但是我用ruby、python、php、java……就可以做所有的事情了!”

我知道。一点也没错!Node并没有神奇到可以帮你完成你的工作,抱歉。它只是一个工具,而它至少现在还不足以完全取代你惯用的工具。

 

“说重点!”

好的。当你需要同时做几件事情的时候,Node是很好用的。你有没有写过一段代码然后说:”我希望这个可以并行运行“?在node里一切都可以并行运行,除了你的代码。

 

“啥?”

是的,除了你的代码,一切都可以并行运行。想象一下你的代码是国王,node是他的侍从们。

一个侍从把国王叫醒,看看他有什么需要。国王交给侍从一系列任务后就回去睡觉了。侍从把任务分配给他的同事,大家开始工作了。

一旦某一个侍从完成了一个任务,他就进入一个队列等待向国王报告。国王依次接受每个侍从的报告。有时国王会在听完报告后给侍从更多的任务。

虽然侍从们可以并行地完成任务,但是每次只能报告一个结果,以便让国王保持专注。

 

“那很棒,不过能不能停止这个愚蠢的比喻,说点专业的?”

当然。一个简单的node程序如下:

 

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

 

你的代码交给node两个任务,分别是读和写一个文件,然后就sleep了。一旦node完成一个任务,就调用回调函数。但是每次只能调用一个回调函数。在该回调函数执行完之前,其他回调函数必须排队等待。此外,我们无法确定回调函数的执行顺序。

 

“所以我不用担心数据的并发访问问题?”

对!这正是JavaScript单线程和事件循环设计的美妙之处。

 

“很好,但我为啥要用它?”

一个原因是执行效率。在一个web应用中,你的总响应时间通常是数据库查询时间的总和。使用node,你可以同时进行所有的查询,将响应时间减少到执行最慢查询的时间。

另一个原因是Javascript。你可以使用node实现浏览器和后端共享代码。JavaScript正在逐步成为一个通用编程语言。无论你过去使用python、ruby、java还是php……你或多或少都用过JS,不是吗?

最后一个原因是运行速度。V8正在持续地提高运行速度以成为最快的动态语言解释器之一。我找不到任何其他语言像JavaScript这样如此激进地提高运行速度。此外,node的I/O工具非常地轻,使你可以尽可能完全利用系统的I/O能力。

 

“所以你是说将来我应该一直用node编写我的所有程序?”

是又不是。只使用一种编程语言和工具会让我们的眼光变得狭窄。(原文:当你开始挥舞node大锤时,一切事物在你眼里都像是一个钉子)但是如果你面临某个任务的deadline时,你可以基于如下的分析进行选择:

  • 低响应时间和高并发是否重要?Node非常擅长这个;
  •  工程的规模有多大?小工程还好。大工程则需要认真评估。(可用的库,修正bug和并行开发的资源等)

“node可以在Windows上运行么?”

不行,如果你用的是windows,你需要运行linux的虚拟机。支持Windows是node的开发计划之一。但是不要为此而等待。(PS:这篇文章是2010年写的,现在已经有支持windows的node了)

 

“我可以通过node访问DOM么?”

好问题!不行,DOM是浏览器的一个接口,node的JS引擎(V8)则完全从那些混乱中分离出来了。但是,有些人在实现DOM的node模块,这将使浏览器端代码的单元测试成为可能。

 

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

这取决于你过去的经验了。如果你已经学过浏览器的AJAX调用和用户事件模型,那么使用node完全不是问题。另外,测试驱动开发可以帮助你进行可维护的设计。

 

“谁在用node?”

这是一个不完整清单。(滚动到"Companies using Node")正在尝试将node用在YUI上,正在使用它做大规模评论(原文:massive comet,怀疑是笔误),Paul Bakaus(jQUery UI作者)正在制作一个,其中在后端用到了node。聘请了Ryan Dahl(node创始人)并让其担任主要开发。

噢,Heroku刚宣布支持node.js主机。

 

“我去哪了解更多信息?”

Time Caswell 的博客。在twitter上Follow。订阅这些。加入IRC channel, #node.js。

此外,我也将继续在发表文章。

 

转载于:https://www.cnblogs.com/jiangu66/p/3249214.html

你可能感兴趣的文章
[HDU3683 Gomoku]
查看>>
【工具相关】iOS-Reveal的使用
查看>>
数据库3
查看>>
存储分类
查看>>
下一代操作系统与软件
查看>>
【iOS越狱开发】如何将应用打包成.ipa文件
查看>>
[NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
查看>>
Yii2 Lesson - 03 Forms in Yii
查看>>
Python IO模型
查看>>
Ugly Windows
查看>>
DataGridView的行的字体颜色变化
查看>>
Java再学习——关于ConcurrentHashMap
查看>>
如何处理Win10电脑黑屏后出现代码0xc0000225的错误?
查看>>
局域网内手机访问电脑网站注意几点
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Day19内容回顾
查看>>
第七次作业
查看>>
SpringBoot项目打包
查看>>
Linux操作系统 和 Windows操作系统 的区别
查看>>
《QQ欢乐斗地主》山寨版
查看>>