Node.js高级编程

JavaScript018

Node.js高级编程,第1张

Nodejs可以做什么

Natives modules

Nodejs更适用于IO密集型高并发请求

使用JS实现高效可伸缩的高性能Web服务

常用api

Buffer缓冲区,Buffer让JavaScript 可以操作二进制

IO行为操作的就是二进制数据

流操作配合管道实现数据分段传输

Nodejs中Buffer是一片内存空间

自定义Buffer之split

实现对Buffer拆分

FS是内置的核心模块,提供文件系统操作的API

文件读写与拷贝操作

文件操作API

文件打开与关闭

readFile,writeFile将文件一次性读取与写入,对于大体积的文件不合理。需要一种边读边写的操作方式

大文件读写操作

文件拷贝自定义实现

优化处理

promise写法

CommonJS规范主要应用于Nodejs

CommonJS规范起初是为了弥补JS语言模块化缺陷

CommonJS规范定义模块的加载是同步完成

Nodejs与CommonJS

模块分类

加载流程

缓存优先原则

nodejs事件管理 通过EventEmitter类实现事件统一管理

events与EventEmitter

定义对象间一对多的依赖关系

订阅者将想要订阅的事件监听注册在调度中心,事件被触发的时候,发布者将事件发布在调度中心,之后调度中心统一调度之前订阅者注册的事件

发布订阅要素

完整事件环执行顺序

在浏览器下有两个任务队列,宏任务,微任务

在nodejs中有六个事件队列。

Nodejs诞生之初就是为了提高IO性能

文件操作系统和网络模块实现了流接口

Nodejs中的流就是处理流式数据的抽象接口

流处理数据的优势

Nodejs内置了stream,它实现了流操作对象

nodejs中流的分类

可写流

用于消费数据的流

自定义可写流

可写流数据

自定义双工流

自定义转换流(中间可以对数据进行转换操作,可读与可写流之间是打通的)

nodejs的stream已经实现了可以保证数据平滑流动的背压机制(pipe方法)

文件读取速度大于写入速度,缓存大小有限。可能会导致内存溢出,GC频繁调用,其它进程变慢

writeStream文件可写流简易实现

Net模块实现了底层通信接口

通信过程

http静态服务实现httpServer

1. 第一章 nodejs npm的安装 以及具体小细节 这个 自己百度就ok 不在详细记录 该贴主要是记录 我自己看nodejs的理解

2. 第二章 node的简介

2.1 名词解释 node简介之前要了解一些名词

1. I/O操作i input o output 写入 读出 这个没有具体的定义 在不同的方面 含义不同 但是 表示的感觉都是相同的最普通的

就是常见的文件的i/o操作就是我们读取一个文件(out)和新建一个文件( in )

还有就是 网络的i/o操作 其实就是请求 request 发起请求(in) response 响应内容(out)

操作系统的i/o 模型 这个 我看的这篇文章 http://blog.csdn.net/zhangzeyuaaa/article/details/42609723

2. 阻塞i/o编程风格

2.2 事件驱动编程风格介绍

1. 程序的执行流程是靠事件 这样的编程形式 比如 你给你的dog 发sit 的指令 他听到后就会 sitdown一样 你发sit 这个就是 事件 因为你的指令 它才会sitdown

阻塞i/o编程风格 通俗理解就是 你做了一件事 拿到了结果 猜想到接下来干什么

事件驱动就是 你知道你干完第一件事以后 知道自己接下来干什么 把接下来干的事情先写好存起来 一但监测到一件事情做好了 就调用已经存好第二件事情的程序 而不是 现场向昨晚第一件后 在做什么

定义当某种感兴趣的事情发生以后由系统调用函数来取代应用返回值的编程风格称为事件驱动编程or异步编程 (这是对以上话的官方版)

这一特点是nodejs最显著的特点

2. 事件驱动的编程风格与事件循环相伴相生 为什么这么说 因为 我们是基于事件驱动的编程风格 我们就需要有一个去一直在循环不断的监测有没有事件发生 (事件监测), 发生后要处理哪一个程序(事件触发处理)

3. Node 模块的应用方法

3.1 加载模块的两种方式

1. 路径

2. 模块的名称 (适用于node本身自带的核心模块如 http 或者通过npm安装的node第三方库)

var moduleName = require("moduleName")

3.2 导出模块 commonJs

1. commonjs模块系统是node中文件共享对象或者函数的唯一方式 在node中 文件和模块是一一对应的 一个模块对应一个功能

1、js  全称 javascript 是 web客户端 运行的 解释性语言。

2、jquery  只不过是  js 封装 简化了 ajax 和 dhtml 的  一款js 框架而已。

拓展资料

1、Javascript,一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的直译语言。它已经由欧洲电脑制造商协会通过ECMAScript实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、FireFox等)支持。

JavaScript是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。

JavaScript虽与Java有很多相似性,但这两门编程语言从设计之初就有很大的不同,JavaScript的语言设计主要受到了Self(一种基于原型的编程语言)和Scheme(一门函数式编程语言)的影响。在语法结构上它又与C语言有很多相似(例如if条件语句、while循环、switch语句、do-while循环等)。

2、jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。

jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等。