【第22期】观点:IT 行业加班,到底有没有价值?

Nodejs

原创 2016年08月29日 16:33:22

node.js简介

Node.js采用C++语言编写而成,浏览器内核V8做为执行引擎;Node不是JS应用、而是一个Javascript的运行环境。Node保留了前端浏览器js的接口,没有改写语言本身的任何特性,依旧基于作用域和原型链。 Node.js 是一个为实时Web(Real-time Web)应用开发而诞生的平台,它从诞生之初就充分考虑了在实时响应、超大规模数据要求下架构的可扩展性。这使得它摒弃了传统平台依靠多线程来实现高并发的设计思路,而采用了单线程、异步式I/O、事件驱动式的程序设计模型。这些特性不仅带来了巨大的性能提升,还减少了多线程程序设计的复杂性,进而提高了开发效率。

Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。

Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。

Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。

Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数.

Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。

当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。

这个模型非常高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作。(这也被称之为非阻塞式IO或者事件驱动IO)
在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。

请记住:Node.js 从来不是用于解决大规模计算问题而创建的。它的出现是为了解决大规模I/O 的问题,并且在这一点上做的非常好。

stream

通过nodejs实现,读取一个文件里面的内容并写入到另一个文件中

var fs = require('fs');
//创建一个可读流
var readerStream = fs.createReadStream('input.txt');
//创建一个可写流
var writerStream = fs.createWriteStream('output.txt');

//管道读写操作
//读取input.txt中的内容输出到output.txt中
readerStream.pipe(writerStream)

node中的模块引用

//hello.js
function Hello(){
    var name;
    this.setName = funciton(thyName){
            name = thyName;
    };
    this.sayHello = function(){
            console.log('Hello'+name);
    };
};
module.exports = Hello;

这样就可以在其他模块中引用hello.js

//main.js
var Hello = require('./hello');
hello = new Hello();
hello.setName('Yang');
hello.sayHello();

util

util 是node.js的一个核心模块,提供常用函数的集合,用于弥补核心JavaScript的功能过于精简的不足。

  • util.inherits
var util = require('util'); 
function Base() { 
    this.name = 'base'; 
    this.base = 1991; 
    this.sayHello = function() { 
    console.log('Hello ' + this.name); 
    }; 
} 
Base.prototype.showName = function() { 
    console.log(this.name);
}; 
function Sub() { 
    this.name = 'sub'; 
} 
util.inherits(Sub, Base); 
var objBase = new Base(); 
objBase.showName(); 
objBase.sayHello(); 
console.log(objBase); 
var objSub = new Sub(); 
objSub.showName(); 
//objSub.sayHello(); 
console.log(objSub); 

输出:

base 
Hello base 
{ name: 'base', base: 1991, sayHello: [Function] } 
sub 
{ name: 'sub' }

上述代码中,我们定义了一个Base函数和一个继承自Base的Sub函数,通过util.inherits() 来实现继承。

注意:Sub只继承了Base()在原型中定义的函数,Base函数中的base,sayHello属性并没继承。同时,在原型中定义的属性不会被console.log 作 为对象的属性输出。

  • util.inspect
    util.inspect(object,[showHidden],[depth],[colors])是一个将任意对象转换 为字符串的方法,通常用于调试和错误输出。它至少接受一个参数 object,即要转换的对象。
    showHidden 是一个可选参数,如果值为 true,将会输出更多隐藏信息。
    depth 表示最大递归的层数,如果对象很复杂,你可以指定层数以控制输出信息的多 少。如果不指定depth,默认会递归2层,指定为 null 表示将不限递归层数完整遍历对象。 如果color 值为 true,输出格式将会以ANSI 颜色编码,通常用于在终端显示更漂亮 的效果。
    特别要指出的是,util.inspect 并不会简单地直接把对象转换为字符串,即使该对 象定义了toString 方法也不会调用。

  • util.isArray(object)
    如果给定的参数“object”是一个数组返回true,否则返回false。

  • util.isRegExp(object)
    如果给定的参数是一个正则表达式返回true,否者false。

  • util.isDate(object)
    如果给定的参数是日期返回的是true,否则false。

  • util.isError(object)
    如果给定的参数是一个错误的对象返回true,否则false。

node.js文件系统

node.js提供一组类似UNIX(POSIX)标准的文件操作API。Node导入文件系统模块(fs)语法如下:

var fs = require('fs');
  • 异步和同步
    Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。
    建议大家是用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。

  • 打开文件
    fs.open(path,flags{,mode},callback);
    flags - 文件打开的行为。
    mode - 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。

  • 获取文件信息
    通过异步模式获取文件信息的语法格式:
fs.stat(path,callback)

callback-回调函数,带有两个参数:(err,stats),stats是fs.Stats对象。

  • 写入文件
fs.writeFile(filename,data[,options],callback)

data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(流) 对象。
options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 ‘w’

  • 读取文件
fs.read(fd,buffer,offset,length,position,callback)

fd - 通过 fs.open() 方法返回的文件描述符。
buffer - 数据写入的缓冲区。
offset - 缓冲区写入的写入偏移量。
length - 要从文件中读取的字节数。
position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
- 关闭文件

fs.close(fd,callback);

fd - 通过 fs.open() 方法返回的文件描述符。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

(3)nodejs学习--系统模块

系统模块nodejs为了方便开发者的使用,已经封装好了很多供我们使用的模块,我们称之为系统模块; 重要的几个模块: Crypto(加密) Events(事件) Net(网络操作) OS...

在ContOS里安装NodeJS

[code="java"] 1,先下载NODE.JS wget [url]https://nodejs.org/dist/v4.2.4/node-v4.2.4.tar.gz[/url] 2,解压node-v4.2.4.tar.gz文件,tar -xzvf node-v4....
  • tcrct
  • tcrct
  • 2016-01-04 18:27
  • 226

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

玩一玩nodejs--一个简单的在线实时填表应用

学习nodejs三天,入了个门,感觉他和jsp、php还是存在较大的差别。本文首先复习这些天学的一些知识点,然后谈一下如何一步一步到做一个在线实时填表的小应用,进一步巩固一下这些个知识点。这里先简单介...

NodeJS入门Demo

       自打接触程序开始,就知道程序开发分前端和后台;然后分了两拨人它们(都是猿类)互相合作,互相鄙视,互相撕逼……很多个日夜后完成一个不那么划时代的产品,其中大部分是项目,产品都算不上。在这条路上我一走就是三年,中间一直在考虑:为啥做个web项目非得分...

nodejs基础与深入

nodejs基础与深入 mysql链接
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)