《深入浅出Nodejs》—— 读后总结
这一个月过去了三分之二,加上之前看过这本书三分之一,这才算是看完。
虽然看完一遍,但是这本书内容很深,以后肯定是还要继续翻阅的.....
什么是Nodejs
Nodejs有几个特性:异步IO,事件驱动,单线程,跨平台
异步IO可以保证在CPU计算的同时,异步的加载IO,加快了应用的访问。不像传统的服务器是使用什么阻塞IO啊、轮训IO等等,它相当于在发送处理请求时,直接传一个回调函数,当异步的IO结束后,会自动的执行回调。
事件驱动,则是把粒度降低到事件级别。传统的服务器是一个请求分配一个线程进行处理,这样就会增加多线程通信的复杂性。而事件驱动,则简化了事件模型。
单线程其实主要是因为Nodejs是基于V8浏览器引擎,因此具有单线程的特点,而且内存很小。这样就引出了Node的劣势——无法利用多核CPU、如果应用出现问题整个系统也会崩溃、CPU繁忙将会影响IO。(因此Node中也提供了child_process模块创建子进程,以此来利用多核;引入了一些集群特性,增加健壮性)。
最后就是跨平台,Nodejs其实并非全部用javascript编写,只是表面的业务语言以及开放的模块才使用js。底层的大部分的模块还是使用C++构建,因此通过切换系统级别的组件,可以直接切换平台。
异步编程
使用Nodejs编写全栈应用,肯定会遇到异步编程的场景。由于有回调的特性,因此可能会出现回调嵌入回调的场景,如果嵌套很深,很影响代码的维护和阅读。
因此异步编程就出现了一些常见的模式:
发布/订阅
这种模式在Nodejs中很常见,像普通的http的on、error或者angular的$watch以及$emit、$broadcast等都是采用这种机制。
Promise/Deferred
最出名的的应该是Kris kawl's Q,后来很多的前端框架都推出了自己的promise模型,比如jquery,dojo,以及angular。这种方式书写出的代码很像传统的单线程顺序执行的代码,阅读起来很方便。
next尾触
这种模式比较有意思,是把一些列的操作放入一个队列。然后按顺序调用,当一个调用结束后,会执行next()方法,继续执行下一个调用。典型的场景就是Node里面的中间件。
内存机制
Nodejs的内存机制很像JVM,因为开发设计Node内存虚拟机的人,正式开发Hotspot的人——结果就是,Nodejs的回收机制跟JVM极其相似。
Nodejs的垃圾回收机制可以简单的描述为:
新生代:
生命周期短的对象,使用复制回收——即把内存分成两块,一块闲置,另一块工作;垃圾回收时,把工作中的存活对象复制到闲置空间中,再交换闲置和工作状态。典型的空间换时间。
老生代:
生命周期长的对象,使用标记清除、标记整理——即标记那些不再使用的对象,回收的时候回收掉这些标记中的对象;由于这种标记方法会出现内存碎片,因此搭配标记整理,可以整理内存。
代码规范
最后总结一下书中提及的代码规范:
1 缩进,由于tab在不同的编辑器中长度可能不同,因此推荐使用两个空格
2 变量声明,尽量每个对象都带上var,不然会变成全局变量污染全局
3 空格,在操作符或者括号两边加上空格
4 尽量优先使用单引号
5 大括号不推荐换行
6 逗号不要在行首出现
7 尽量每一句结尾都带上分号
8 变量命名:小驼峰,如userName;
方法命名:小驼峰,getName();
类命名:大驼峰,NameFilter;
常量命名:大写字母,USER_COUNT;
文件命名:下划线分割,user_test.js;
模块命名:简短单词,express、fs
9 比较操作使用 ===
10 使用{} [] 创建对象和数组
11 尽量避免使用with、eval
12 区分使用对象和数组
学习笔记
《深入浅出Nodejs》—— 读后总结的更多相关文章
- 我的第一本docker书-阅读笔记
花了三四天看完了我的第一本docker书,话说书写的还是挺简单易懂的.与传统的VM,VirtualBox,或者与那种内核虚拟的xen,kvm相比,docker作为一种容器的虚拟方式,以启动进程的方式来 ...
- 《第一本docker书》—— 读后总结
关于docker 这本书其实并没有读完,只不过最近工作比较繁忙,也无心再看这些用不到的书.以后要是工作需要,再仔细学习吧. 这次的阅读算是达到目的了,对docker有了一定的了解.它的作用.意义以及大 ...
- 第一本Docker书读书笔记
日常使用命令 1.停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q) 如果想要删除所有container的话再加一个指令: ...
- 《第一本Docker书》
Docker简介 Docker依赖写时复制(copy-on-write),使修改应用程序非常迅速. Docker推荐单个容器只运行一个应用或进程,鼓励面向服务的架构和微服务架构. Docker的核心组 ...
- 第一本docker书 学习笔记(二)
#安装docker的先决条件 运行64位CPU构架的计算机(docker目前不支持32位的cpu) 运行LUFSinux3.8或者更高版本内核 内核必须支持一种合适的存储驱动,例如: device M ...
- 《第一本Docker书》学习笔记——第3章 Docker入门
3.1 确保Docker已经就绪 查看docker是否正常工作: sudo docker info 3.2 运行我们的第一个容器 现在,让我们尝试启动第一个Docker容器.我们可以使用docker ...
- 《第一本docker书》- 第一章笔记
环境: Ubuntu 14.04.2 LTS (GNU/Linux 3.16.0-30-generic i686) 第一章: 1 Docker客户端和服务器 2 Docker镜像 添加一个文件,执行一 ...
- 《第一本docker书》第4章 使用docker镜像和仓库 读书笔记
docker最底端是一个引导文件系统,即bootfs. 第二层是root文件系统rootfs,位于引导文件系统之上. 在传统的Linux引导过程中,root文件系统会最先以只读的方式加载,当引导结束并 ...
- 第一本docker书,,持续更新中
1.查看应用是否在docker中部署成功 需要确认curl已安装 whereis curl sudo apt-get -y install curl curl localhost:8081 如果成 ...
- 第一本docker书 学习笔记(一)
Docker的核心组件: Docker客户端和服务端 Docker镜像 Registry Docker容器 # Docker客户端和服务端 docker 是一个 C/S架构程序.客户端只需要向dock ...
随机推荐
- python 面向对象初级篇
Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...
- 前端优化 - 打开速度1s
先看一下网页的加载流程: 1.解析html结构2.加载外部脚本和样式表文件3.解析并执行脚本(脚本会阻塞页面的加载)4.DOM树构建完成 (DOMContentLoaded)5.加载图片等外部文件6. ...
- c语言结构体
[C语言]21-结构体 本文目录 一.什么是结构体 二.结构体的定义 三.结构体变量的定义 四.结构体的注意点 五.结构体的初始化 六.结构体的使用 七.结构体数组 八.结构体作为函数参数 九.指向结 ...
- 转:简单窗体振动-WaitForSingleObject,消息,winapi
http://www.cnblogs.com/Jekhn/archive/2012/08/25/2656656.html 线程,消息函数,SetWindowPos设置窗体位置 if WaitForSi ...
- React 学习,需要注意几点
最近要开始学习 React 框架了,在学习的过程中,个人作为一个新手觉得需要注意的一些问题 小细节有以下几点: 1:在JSX语法当中,如果遇到 HTML 标签(以 < 开头),将用 HTML 规 ...
- (转)windows系统下Python环境的搭建
原博文地址:http://www.cnblogs.com/windinsky/archive/2012/09/20/2695520.html 这段时间在做python,觉得这个配置环境的帖子还不错,分 ...
- css技巧
1.实现position为fixed与absolute值时居中定位: 给需要定位的元素块外加一层div盒子,外层div盒子存在于文档流中,让外层div盒子居中定位并设置position属性为relat ...
- SQL Server2008附加数据库之后显示为只读时解决方法
啰嗦的话就不多说了,直入主题吧! 方案一: 碰到这中情况一般是使用的sa账户登录的,只要改为Windows身份验证,再附加数据库即可搞定. 方案二: 使用sa登录SQL Server2008附加数据库 ...
- doduicms 手机和pc同步 链接处理
sitem.aspx 加上 Session.Add("ismobile", "1"); string mobile = HttpContext.Current. ...
- 对 griview获取的数据添加方法 6月
<asp:TemplateField HeaderText="日期"> <HeaderStyle CssCl ...