node学习笔记(连载)

这段时间玩了小程序、浏览器插件、koa建站,本来想写几篇文章总结一下的。迫于工作上有新需求要跟进,所以先写写读书笔记吧。公司九点上班,不过弹性工作时间,大家基本上九点半之前到。而我作为渣渣,八点半就到公司。来干什么呢?看一会儿书,多学学准没错。

最近在看一本名为《Node.js 开发指南》。下面是我的个人读书笔记,仅作为以后温故的时候用。下面以时间为节点进行记录。

 

2017-09-27:

  异步式 I/O 与 事件驱动:Node.js最大的特点就是采用异步式I/O与事件驱动的架构设计。传统的架构是多线程模型,也就是为每个业务逻辑提供一个系统线程,通过系统线程切换来弥补同步式 I/O 调用时的时间开销。Node使用的是单线程模型,对于所有的I/O都采用异步式的请求方式,避免繁琐的上下文切换。Node在执行过程中会维护一个事件队列,程序在执行时进入事件循环等待下一个事件到来,每个异步式I/O请求完成后会被推送到事件队列,等待程序进程进行处理。

  举个🌰:

  一个简单的数据库查询操作,按照传统的方式:

  res = db.query('SELECT * from some_table');

  res.output();

  Node方式:

  db.query('SELECT * from some_table', function(res) {res.output();});

  分析: 传统的方式肯定会造成线程的阻塞,等待数据库返回查询结果之后才会继续执行下面的代码。数据库的查询可能涉及磁盘读写、网络通信等。延时可能会有几百毫秒,高并发的情况下,线程长期阻塞等待,为了应付新请求要不断的增加线程,会浪费大量的系统资源,线程的增多会占用大量的CPU时间来处理内存上下文的切换。

     Node会在第二个参数放入回调函数。进程在执行到db.query的时候,不会等待结果返回,继续往下执行,直到进入事件循环。当数据库查询结果返回的时候,会将事件发送到队列,等到线程进入事件循环以后,才会调用之前的回调函数。

2017-09-28:

  今天我发现了一件事情,就是这本node书特么是2012年写的,惊了宝贝。。。我就是在公司书架上看到的一本,随手一拿。不经感慨node这几年发展的速度之快,2012年的时候跟现在2017年变化还是很大的,里面说到了node解决异步的问题可以用async这个包,现在node更新至8.6.0,早已将async await更新进去了。在我开发的项目中已经用上了这个方法,抛弃了之前的 * yeild形式。

  最近在做公司的官网,主要是切图为主,别看简单的切图。。。设计师想出的动效倒是一套一套的。。。一个一个给他做了,发现css有很多有趣的东西是我之前没有触及的,有机会的话,还是要把css系统的再过一遍,张鑫旭慕课网的教程还是不错的。大家有兴趣可以去慕课网搜一下。溜溜球~~~

2017-10-09: 

  国庆回家八天没敲代码,手感都生疏了。。。。

  今天试着用koa搭建个网站,试着连一下mongo(都是跑在本地的)。记录一下步骤和心得,以免之后忘记了。

  首先当然是要去mongo的官网下载数据库https://www.mongodb.com/,我是折腾了半天才搞出来,网上很多教说是用brew装,我嫌麻烦就直接去官网下了。下载过来之后进入安装目录,找到mongod.exe对应的文件夹,在控制行输入 ./mongod,数据库就在本地跑起来了,跑起来之后可以去下载一个数据库可视化工具studio 3t(以前叫mongochef),非商业版免费。然后打开这个软件创建连接,端口默认是27017,自己给数据库取个名字。

  在程序例面通过mongoose这个包去操作数据库,如图:连接数据库

      

  连接成功之后,可以去看看mongoose创建表结构和模型的文档。http://mongoosejs.com/docs/guide.html

  表结构就是数据库表字段的字段类型,如下

  

  模型其实就是定义数据表的意思,创建模型的时候要引入表结构(Schema)作为参数,如下

  

  模型被某个模块引入的时候,它其实就是一个构造函数,new出来的实例都拥有构造函数里的方法,如下

  

  当你运行这段代码的时候,数据库写入了相应的字段,如下

  

  

 

posted @ 2017-09-27 09:26  陈尼克  阅读(225)  评论(0编辑  收藏  举报