深入浅出nodejs学习笔记——nodejs简介

基于事件驱动;非阻塞I/O

四种I/O: 同步(synchronous)IO和异步(asynchronous)IO,阻塞(blocking)IO和非阻塞(non-blocking)IO

阻塞I/O要等数据到了才能继续,否则会阻塞用户进程

非阻塞进程中用户请求后会立即得到结果(比如如果数据没有准备好会返回error)

Google V8 引擎使用 C++ 代码编写,实现了ECMAScript 规范的第五版,可以运行在所有的主流

操作系统中,甚至可以运行在移动终端 ( 基于 ARM 的处理器,如 HTC G7等 )。V8 最早被开发用以嵌入到 Google 的开源浏览器 Chrome 中,但是 V8 是一个可以独立的模块,完全可以嵌入您自己的应用,著名的 Node.js( 一个异步的服务器框架,可以在服务端使用 JavaScript 写出高效的网络服务器 ) 就是基于 V8 引擎的。

更多关于V8的知识:http://www.ibm.com/developerworks/cn/opensource/os-cn-v8engine/

Node中的读取文件为异步I/O,和ajax数据传输道理相同,代码如下:

var fs = require(‘fs’);

fs.readFile(‘/path’, function(err, file){

console.log(“读取文件完成”);

});

Node是单线程的,不会出现死锁等问题,但会出现一下三个缺点;

1.      无法利用多核CPU

2.      错误会引起整个应用退出,应用的健壮性值得考验

3.      大量计算占用CPU导致无法继续调用异步I/O

CommonJS规范:为了弥补Javascript没有标准的缺陷

CommonJS模块规范:

1.      模块引用:var math = require(“math”);

2.      使用export导出模块

//math.js文件

export.add = function(){

//函数方法

}

使用require进行调用

//program.js文件

var math = require(‘math’);

exports.increment = function(val){

return math.add(val,1)

}

//注意上面的代码右生成了一个increament方法

模块中存在module对象,代表模块自身。Export是module的属性

3.      模块标识

即require中传进去的参数

Node中引入模块分为下面三个步骤:路径分析、文件定位、编译执行

Node中也会对模块进行缓存,缓存的是编辑和执行后的对象。会优先从缓存中加载。

模块加载时require()方法传递的四种参数:

1.      核心模块,如http/fs/path等

2.      .或..开头的相对路径文件模块

3.      以/开头的绝对路径文件模块

4.      非路径形式的文件模块,如自定义的connect模块

Node中模块分为核心模块(node中自定义的)和文件模块(用户定义的)

Node中的模块编译

不同后缀名的编译方式不同。可以通过console.log(require.extension);查看已有扩展名加载方式

添加自定义的加载后缀名加载方式:require.extension[‘coffee’]

模块对象的定义代码:

function Module(id, parent){

this.id= id;

this.exports= {};

this.parent= parent;

if(parent&& parent.children){

parent.children.push(this);

}

this.filename =null;

this.loaded =false;

this.children =[];

}

为不同后缀名的文件定义编译方法:

Module._extension[‘.json’] =function(module, filename){ …… }

直接赋值形参会改变形参的引用,但不能改变作用域外的值:

var change = function(a){

a = 100;

console.log(a);// =>100

};

var a = 10;

change(a)

console.log(a);// =>10

因此如果要达到require引入一个类的效果,请赋值给module.exports对象

底层是C/C++,C/C++内建模块属于最底层的模块。

时间: 2024-10-20 10:06:47

深入浅出nodejs学习笔记——nodejs简介的相关文章

Nodejs学习笔记(八)--- Node.js + Express 实现上传文件功能(felixge/node-formidable)

目录 前言 formidable简介 创建项目并安装formidable 实现上传功能 运行结果 部分疑惑解析 写在之后 前言 前面讲了一个构建网站的示例,这次在此基础上再说说web的常规功能----文件上传,示例以一个上传图片的功能为例子 上传功能命名用formidable实现,示例很简单! PS:最近比较忙,距上一次更新已经比较久了^_^! formidable简介 nodejs原生实现上传还是比较麻烦,有兴趣的自已去参考一下网上有网友写的代码 这里选择了formidable,也是githu

Nodejs学习笔记(三)——一张图看懂Nodejs建站

前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试Nodejs>之后,代码编写环境就从Sublime转战到Eclipse下,感觉顺手多了.于是就跟着Scott老师学起了Nodejs建站的课程(推荐大家点进去看看),踏上了未爬先走的路子. 作为一个白里透白的小白来说,今天主要记录下如何用Nodejs搭建一个小小的网站,以及自己对于这种Nodejs建站的运

CoAP学习笔记——nodeJS node-coap返回JSON数据包

0 前言 本文说明如何使用node-coap返回JSON数据包.CoAP是专门为物联网系统开发的面向网络的应用层协议栈,CoAP建立在UDP协议之上尽可能减少网络开销,又具有HTTP Restful类型的特性.node-coap使用nodejs实现了coap的客户端和服务器端. [测试环境]--ubuntu/Linux [相关博文] [CoAP协议文档--The Constrained Application Protocol (CoAP)] [CoAP协议学习--CoAP基础] [CoAP学习

nodejs学习笔记(基于v7.4.0)

nodejs学习笔记 一.buffer: 全局对象(单例   Buffer.from   Buffer.alloc   Buffer.allocUnsafe ) 编码类型 描述 ascii 仅仅用于7位ascall数据编码,速度快,如果设置了将会剥离高位 utf8 多字节的编码的Unicode字符,网页文档大部分默认都为它. utf16le 小端编码的Unicode字符,2或者4个字节 ucs2 utf16le的别名 base64 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之

nodejs学习笔记_nodejs和PHP在基础架构上的差别--共享状态的并发

绝大多数对于Node.js的讨论都把关注点放在了处理高并发能力上,做开发的时候一定要明确node内部做出的权衡,以及node应用性能好的原因. node 为javascript引入了一个复杂的概念,:共享状态的并发. node採用一个长期执行的进程 而php在apache中会产生多个进程 例如以下图所看到的: 代码验证: PHP: <?php $i = 0; $i++; echo $i nodejs: var http = require('http'); var i=0; http.creat

nodejs学习笔记之安装、入门

由于项目需要,最近开始学习nodejs.在学习过程中,记录一些必要的操作和应该注意的点. 首先是如何安装nodejs环境?(我用的是windows 7环境,所以主要是windows 7的例子.如果想看linux下的安装可以参考http://www.cnblogs.com/meteoric_cry/archive/2013/01/04/2844481.html) 1. nodejs提供了一些安装程序,可以去官网(http://nodejs.org/download/)按照自己的机器进行下载,下载完

CoAP学习笔记——nodeJS node-coap安装和使用(Linux平台)

 0 前言 本文说明如果安装和使用node-coap.CoAP是专门为物联网系统开发的面向网络的应用层协议栈,CoAP建立在UDP协议之上尽可能减少网络开销,又具有HTTP Restful类型的特性.node-coap使用nodejs实现了coap的客户端和服务器端. [测试环境]--ubuntu/Linux [相关博文] [CoAP协议学习--CoAP基础] [CoAP学习笔记--CoAP资源发现] [CoAP学习笔记--服务器端繁忙时的处理请求流程] [树莓派学习笔记--webiopi安装与

CoAP学习笔记——nodeJS node-coap安装和使用(windows平台)

0 前言 本文尝试在windows平台中搭建基于nodeJS的CoAP Server. linux平台搭建和使用过程可参考--CoAP学习笔记--nodeJS node-coap安装和使用(Linux平台) [测试环境]--windows [相关博文] [CoAP协议学习--CoAP基础] [CoAP学习笔记--CoAP资源发现] [CoAP学习笔记--服务器端繁忙时的处理请求流程] [树莓派学习笔记--webiopi安装与入门]webiopi中集成了CoAP Server,可以方便地通过CoA

NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证

JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器.每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情.例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象.而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS就相应提供了fs.http等内置对象.E