Node.js的特点详解


Posted in Javascript onFebruary 03, 2017

Node.js是一个基于Chrome v8引擎建立的Java运行平台,用于搭建响应速度快、易于扩展的网络应用。本文和大家分享的是Node.js的一些特点,希望对大家学习Node.js有帮助。

异步I/O

这里,我们来详细解释一下:

异步是什么意思

比如说你的爸,今天要叫你做些事情,比如说你要做饭、洗衣服还有扫地,以及烧开水等等一系列的事情。那么,就你一个人来说,你是不是得一件事一件事的挨个做完了之后,才能接着做下一件事。比如说,你是不是烧完开水,然后才来扫地,扫完地然后再来煮饭,煮完饭,你可能才会做其他事情。那么这个过程,我们把它叫做同步的过程。你做一件事,你必须要等待,等待做完了之后,再做另外一件事。那么这个时候,如果我们懂得合理安排时间的话,我们可以这样办:我们在烧开水的时候,我们可以扫地,因为烧开水不用我们守着嘛!只需要把水放好,或点燃就行了。然后,我们可以去做其他事情了。比如说,扫地,或者是洗衣服,等等一系列的事情我们都可以做。那么这样,在做完了同样的事情,但是我们所需要花费的时间,它是不一样的。你用后面这种方式,可能用的时间会更短,效率更高。而你用前面那种同步的方式,它的效率会更低。那么,后面这种事情,我们就把它叫做异步的操作。

事件与回调

如果你采用异步的方式来做事情,它的效率会很高,但是你同时只能做一个事情。比如说,你烧开水的时候,虽然说不用你守在那里。但是你扫地了过后,你这个水烧开的时候,我怎么知道呢?(就是这件事做好了之后,我怎么知道呢?)

于是我们可以想一下,在这个水壶上面,给它放一个小喇叭,当这个水烧开了之后会冒蒸汽,当这个蒸汽吹响这个喇叭的时候,我们就知道这个事情做好了,水烧开了,我们就可以接着做水烧开之后的事情了。

这个事件与回调就是:这个水烧开了以后,它会以事件的形式来通知你(我这个事情做好了,你可以把这个水装好了)。

回调是什么意思

当它的事件发生了过后,它会通知你,那么你在装水这个过程,就是在回调(就是处理这个过程)。处理完烧开水过后的结果

单线程

这一点是node.js比较大的一个特点。它可以开发出高效的后台应用(网络应用)

什么是单线程

还是用刚才那个例子。你爸叫你做很多件事情,如果你不懂的合理安排时间,你就只能用同步;那么同步的时候,你可能会这样想:我叫我几个小伙伴来帮我做这个事情(叫个两三个小伙伴)。一个帮我烧开水,一个帮我扫地,一个帮我煮饭。这样操作的话,在同一个时间段,就有多个人来帮你做事情。(这种操作,我们把它叫做多线程操作,就是同一时间段,有多个人来做事情)

多线程操作它有个缺点,就是你请这些小伙伴来帮你做事情,肯定要犒劳一下他们,那么你势必会花费一下你的零用钱,你肯定要买点好吃的东西来犒劳一下。那么这样,如果你不想花你的钱,但是你又想把事情做好,那么你怎么办呢?只能按照刚才我们异步的方式,就是你一个人做。又要提高效率怎么办呢?就是我做这件事情的时候,同时又要做其它事情,那么这个就是单线程(就是一个人做事情)。

跨平台

目前我们的node.js在mac系统上、Windows上面和Linux这些上面,都可以运行,它已经开发除了对应的运行环境了。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
Javascript动态绑定事件的简单实现代码
Dec 25 Javascript
JavaScript实现大数的运算
Nov 24 Javascript
javascript中定义类的方法汇总
Dec 28 Javascript
jQuery中animate动画第二次点击事件没反应
May 07 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
Dec 03 Javascript
浅谈jquery点击label触发2次的问题
Jun 12 Javascript
jQuery事件详解
Feb 23 Javascript
让微信小程序支持ES6中Promise特性的方法详解
Jun 13 Javascript
基于node.js之调试器详解
Aug 22 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
Aug 08 jQuery
当vue路由变化时,改变导航栏的样式方法
Aug 22 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
May 09 Javascript
Bootstarp 基础教程之表单部分实例代码
Feb 03 #Javascript
javascript判断回文数详解及实现代码
Feb 03 #Javascript
Javascript中数组去重与拍平的方法示例
Feb 03 #Javascript
JavaScript中for循环的几种写法与效率总结
Feb 03 #Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
Feb 03 #Javascript
漂亮实用的页面loading(加载)封装代码
Feb 03 #Javascript
理解javascript中的Function.prototype.bind的方法
Feb 03 #Javascript
You might like
php获取mysql版本的几种方法小结
2008/03/25 PHP
php读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
PHP7 其他修改
2021/03/09 PHP
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
xml转json的js代码
2012/08/28 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
jQuery简单实现中间浮窗效果
2016/09/04 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
JavaScript中双向数据绑定详解
2017/05/03 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能
2017/11/27 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
[00:44]2016完美“圣”典 风云人物:Mikasa宣传片
2016/12/07 DOTA
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
Python利用Django如何写restful api接口详解
2018/06/08 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
python实现键盘输入的实操方法
2019/07/16 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
Paper Cape官网:美国婴儿和儿童服装品牌
2019/11/02 全球购物
小学一年级数学教学计划
2015/01/20 职场文书
个人委托书范文
2015/01/28 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
写给导师的自荐信
2015/03/06 职场文书
2015年中个人总结范文
2015/03/10 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
家长必看:义务教育,不得以面试 评测等名义选拔学生
2019/07/09 职场文书