最近看了一本书,说了一些Node.js的东西,现在来记录一下,让自己记得更牢靠一点。
在书上,是这样介绍的:Node.js模型是源于Ruby的Event Machine 和 Python的Twisted模型,使用事件循环
运行JavaScript程序。不同于传统程序设计模型的阻碍调用,Node.js使用单个线程的事件循环来执行JavaScript程序
代码。并且,在书里面,也对阻碍调用进行了解释:运行程序时,必须等到上一个调用完成后,才能执行下一个函数
调用,如果调用的是处理文件I/O,因为执行时间较长,就会阻碍之后的程序代码的执行(CPU只能等待I/O结束)。但
是Node.js却不是这样,它用事件驱动程序设计来解决阻碍调用影响程序运行效率的问题。
对于有一定基础知识的人,肯定是知道什么是I/O是什么,可是任然是有人不知道什么是I/O的。那么现在就
来解释一下什么是I/O。简单的说下,所谓的I/O就是输入输出流,也就是input/output。事件在输入输出流里面,在上
一个函数没有执行完毕时,是不会进行下一件事件的。而NODE.JS的主要设计理念是I/O是影响程序效率的最大障碍,为
了提升程序运行效率,使用无阻碍I/O的事件驱动程序来建立Node.js,以事件循环方式运行Node.js程序。说到这里,
就要解释一下什么是事件循环了:事件循环是一个持续工作的循环,主要提供了2个功能,即事件侦测和触发事件处理,
在每一次执行循环就是在侦测是否有事件触发,如果有,事件循环负责判断事件绑定了哪一个回拨函数,然后调用这个
回拨函数。
有一点不得不说,Node.js使用单线程方式来执行程序代码,并没有并行执行任何Javascript程序代码,而且在
任何时刻只会有单一片段的程序代码在执行,只是因为使用无阻碍I/O的异步程序设计,程序执行就不会被缓慢的I/O操
作阻碍,所以能够大幅度的提升程序的运行效率。
Node.js的精神是将程序设计改为事件驱动的异步程序设计,而我们之所以可以如此进行程序设计,就是因为
Javascript的闭包概念。
因为Javascript函数是第一级对象(Function是Object的第一级实例),我们可以将函数当成参数来传递给其
它函数,之前的回拨函数就是使用此方式。闭包是指函数可以继承其上一层环境的变量,记住函数定义时上下文的内容,
即上衣曾函数范围内声明的变量值。
对于Node.js来说,Javascript闭包可以帮助我们创建异步程序设计的Node.js程序,因为事件驱动程序设计的
执行流程是事件决定,当事件出发时,Node.js事件循环可以调用此事件的回拨函数进行处理,回拨函数是以参数方式来
传递给其他函数的。
问题是回拨函数是在事件除法之后才会被调用和执行,当它调用时起执行范围可能早已返回释而消失。Javascript
闭包可以神奇记住调用回拨函数前的状态,简单的说,Javascript范围并不是执行时的状态,而是源代码的上下文内容,
闭包可以帮助我们记住调用前的状态(也就是具有缓存的作用,但是这个缓存却不会对全局造成影响),让程序正确的执行。
下面时最近搞错的两个方法,一个是join,另外一个是split。
join是对数组的操作,返回值是字符串,split是对字符串的操作,返回值是数组。两个方法的作用相似,但是操
做对象和返回对象正好相反。之前闹了一个大笑话.........

关于node的基础理论,书上看来的的更多相关文章

  1. JAVA理解逻辑程序的书上全部重要的习题

    今天随便翻翻看以前学过JAVA理解逻辑程序的书上全部练习,为了一些刚学的学弟学妹,所以呢就把这些作为共享了. 希望对初学的学弟学妹有所帮助! 例子:升级“我行我素购物管理系统”,实现购物结算功能 代码 ...

  2. Angularjs+node+Mysql实现地图上特定点的定位以及附加信息展示

    注:本博文为博主原创,转载请注明出处. 在上一篇博文中主要讲述了如何利用AngularJs+Node+MySql构建项目,并实现地图上的多点标注,今天在这篇文章中,我们将在上一个项目的基础上,实现特定 ...

  3. c++编程思想(四)--对象和隐藏(感觉书上有误)

    c++编程思想里数据抽象和隐藏实现实际就是通常所说的类和封装: 封装,继承,多态对象特点说的很多,就不再说了 关于封装,本人觉得书上有个地方写的有问题,p145和p153都提到Y::f(X*)引用了X ...

  4. Node.js~在linux上的部署~pm2管理工具的使用

    之前写了两篇关于在linux上部署nodejs的文章,大家如果没有基础可以先看前两篇<Node.js~在linux上的部署>,<Node.js~在linux上的部署~外网不能访问no ...

  5. OK 开始实践书上的项目一:即使标记

    OK 开始实践书上的项目一:及时标记 然而....又得往前面看啦! ----------------------我是分割线------------------------ 代码改变世界

  6. 使用express+multer实现node中的图片上传

    使用express+multer实现node中的图片上传 在前端中,我们使用ajax来异步上传图片,使用file-input来上传图片,使用formdata对象来处理图片数据,post到服务器中 在n ...

  7. node中间层实现文件上传

    一般情况下,前端的文件上传一般都是通过form表单的(<input type="file" />)来完成文件的上传,如果使用node中间层完成跨域,文件的上传就需要在n ...

  8. OpenACC 书上的范例代码(Jacobi 迭代),part 3

    ▶ 使用Jacobi 迭代求泊松方程的数值解 ● 使用 data 构件,强行要求 u0 仅拷入和拷出 GPU 各一次,u1 仅拷入GPU 一次 #include <stdio.h> #in ...

  9. java代码流类。。程序怎么跟书上的结果不一样???

    总结:这个程序很容易懂.的那是这个结果我觉得有问题啊..怎么“stop”后,输出的内容是输入过的呢? 应该是没有关系的呀,与输入的值是不同的....怎么书上运行的结果和我的不一样啊 package c ...

随机推荐

  1. python网络编程(进程与多线程)

    multiprocessing模块 由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程. multiproce ...

  2. 云计算之路-阿里云上:节点 CPU 波动引发 docker swarm 集群故障

    非常抱歉,今天 10:05-10:20 左右,我们用阿里云服务器搭建的 docker swarm 集群又出现故障,又是因为突然的节点 CPU 波动. 受这次故障影响的站点有 闪存,博问,班级,园子,短 ...

  3. CSS容器属性

    最近一直想美化博客的文字效果和增加文章末尾的转发提示,所以这两天抽空研究了一下CSS,前两篇可以翻我的博客,今天写的这篇是介绍增加文章末尾的转发提示,效果如文章末尾所示,好了,CSS很简单,我就不介绍 ...

  4. docker 安装 msyql

    **************************************************************************************************** ...

  5. Spring+redis整合遇到的问题集以及注意事项

    redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...

  6. Ring3句柄表的枚举

    由于windows并没有给出枚举所有句柄所用到的API,要获得句柄,我们必须使用未公开的Native API才可以,使用如下函数: NTSTATUS WINAPI NtQuerySystemInfor ...

  7. 【故障】MySQL主从同步故障-Slave_SQL_Running: No

    转自:http://www.linuxidc.com/Linux/2014-02/96945.htm 故障现象:进入slave服务器,运行:mysql> show slave status\G  ...

  8. [转]如何使用PHP实现javascript的escape和unescape函数

    前端开发工程师都知道javascript有编码函数escape()和对应的解码函数unescape(),而php中只有个urlencode和urldecode,这个编码和解码函数对encodeURI和 ...

  9. 创建一个离线优先,数据驱动的渐进式 Web 应用程序

    原文地址:Build an offline-first, data-driven PWA 译文出自:我的个人博客 概述 在本文中,您将学习如何使用 Workbox 和 IndexedDB 创建离线优先 ...

  10. java里程碑之泛型--深入理解泛型

    所谓泛型,就是允许在定义类,接口,方法时使用类型形参,这个类型形参将在声明变量,创建对象,调用方法的时候动态的指定.JAVA5之后修改了集合中所有的接口和类,为这些接口和类都提供了泛型的支持. 关于泛 ...