《深入浅出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以及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·内存控制

Nodejs·理解Buffer

Nodejs·网络服务

Nodejs·构建web应用

Nodejs·进程

本文转自博客园xingoo的博客,原文链接:《深入浅出Nodejs》—— 读后总结,如需转载请自行联系原博主。

时间: 2024-10-30 12:42:21

《深入浅出Nodejs》—— 读后总结的相关文章

读后有感 - 残忍但诚实的忠告:您没钱,就不要掺和这事了

读后有感 - 残忍但诚实的忠告:您没钱,就不要掺和这事了 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 人民日报微信公众号该文原链接 对于此文,本人没有任何感想,处于五感抽搐,三观沉浮的游离状

node js-centos部署nodejs项目后,无法加载

问题描述 centos部署nodejs项目后,无法加载 各位仁兄:我在centos部署了Nodejs并成功,我将项目部署的Nodejs.并可以 成功启动,但是从页面中访问的时候,一直无法加载页面.后台不报异常. 请各位看看这个什么问题引起的 解决方案 清除一下你的浏览器缓存再试试,或者在测试的时候禁用浏览器缓存. 304 Not Modified 如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码.304

pm2 start启动了一个nodejs应用后,使用pm2 list没任何输出

问题描述 pm2 start启动了一个nodejs应用后,使用pm2 list没任何输出 windows环境下,我用pm2 start启动了一个nodejs应用,接着打开另外一个命令行窗口,pm2 list却是没响应,没输出任何东西,请问是什么原因啊? 急,试了一个下午了,谢谢 解决方案 pm2 start启动了一个nodejs应用后,使用pm2 list没任何输出 解决方案二: nodejs启动守护程序pm2

读后有感 - 媒体称教育减负加剧阶层分化 贫民子弟受损

读后有感 - 媒体称教育减负加剧阶层分化 贫民子弟受损 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 第二次补充: 残忍但诚实的忠告:您没钱,就不要掺和这事了 (人民日报微信公众号关于减负令的

读后有感 - UI设计师必知:线框图、原型和视觉稿

读后有感 - UI设计师必知:线框图.原型和视觉稿 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 线框图:草图,重点在交互的目标上,即业务如何交互完成,是不依赖于平台的,如同数据库设计中的概念

《Effective Java》—— 读后总结

这本书在Java开发的行业里,颇有名气.今天总算是粗略的看完了...后面线程部分和序列化部分由于心浮气躁看的不仔细.这个月还剩下一周,慢慢总结消化. 本文转自博客园xingoo的博客,原文链接:<Effective Java>-- 读后总结,如需转载请自行联系原博主.

《Hive编程指南》—— 读后总结

知识图谱 本文转自博客园xingoo的博客,原文链接:<Hive编程指南>-- 读后总结,如需转载请自行联系原博主.

《JS修炼之道》—— 读后总结

本篇是基于<JS修炼之道>的记录性与总结性的文章,这本书从多种框架的角度,讲述了JS开发中的一些实用技巧. 比如Prototype,JQuery,Mootools,YUI,Dojo,Ext,不过我个人仅仅会点JQuery而已,因此也就专门只看JQuery的部分了. 任务1 动态选择方法及属性 由于方法在js中也是一种属性,因此可以使用属性的方法来调用方法: var test = {a:func,b:20}; test.a(); test.b; 或者 test[a](); test[b]; 使用

《SQL必知必会》—— 读后总结

本文转自博客园xingoo的博客,原文链接:<SQL必知必会>-- 读后总结,如需转载请自行联系原博主.