1、Nodejs特点:单线程、Non-blocking I/O、Event Driven。
首先,Node不为每个用户开辟一个线程,所以非常极端的选择的单线程。单线程,要照顾所有的用户,那么就必须要有非阻塞I/O,否则一个人的I/O就把别人】自己阻塞了。一旦有了非阻塞I/O,一个人如果I/O去了,就会放弃CPU使用权,换成另外一个人使用CPU(或者执行此人后面的语句)。所以CPU的利用率100%。第一个I/O结束了,就要用事件来通知线程,执行回调函数。此时必须有事件环,就有一个排队调度机制。Node中超过半数的C++代码,在搭建事件环。
2、Nodejs不同之处
(1)没有自己的语法,使用V8引擎,所以就是js。V8引擎解析js效率非常高,并且V8中很多东西都是异步的。Node就是将V8的一些功能自己没有重写(用的别人的),移植到服务器上。
(2)没有web容器,就是安装配置完成会后,没有根目录。
3、前端:jQuery js相当于后端的:express 原生node
一个js文件中定义变量、函数都只在内部有用。多个js文件相互之间调用需要exports暴露以及require引用。JS不包含作用域,前端写的时候是封装在。
exports可以暴露很多东西变量、函数。
foo.js
var msg = "hello";
function showInfo(){
console.log("hihi");
}
exports.msg = msg;
exports.showInfo=showInfo;
在使用时只需要require一次。增加了顶层变量foo,所有函数和变量都要从这个顶层变量。
04.js
var foo = require("./test/foo.js");
console.log(foo.msg);
foo.showInfo();
Node中,js和js文件有exports和require网站在一起的,不是由html联系在一起的。
4、在js文件中用module.export=构造函数的方式向外暴露一个类。
People.js
function People(name,sex,age){
this.name = name;
this.sex = sex;
this.age = age;
}
People.prototype = {
sayHello : function(){
console.log(this.name + this.sex + this.age)
}
}
//此时,People为构造函数,可以用new实例化了
module.exports = People;
05.js
var People = require("./test/People.js")
var xiaoming = new People("xiaoming", "nan", "12");
console.log(xiaoming);
xiaoming.sayHello();
结果图:
H:\nodedemo\test3>node 05.js
{ name: 'xiaoming', sex: 'nan', age: '12' }
xiaomingnan12
js文件和js文件之间有两种合作模式。
(1)某一个js文件提供了函数供别人引用,只需要暴露函数即可。exports.msg=msg;
(2)某一个js文件描述了一个类,供别人引用。module.exports=People;
5、如果require没有写./ 则默认是从node_modules导入的。每个模块文件夹中,推荐在根目录中写一个package.json文件,名字不可改。node将自动读取里面的配置。有一个main,是入口文件。
{
"name":"ceshi",
"version":"1.0.1",
"main":"app.js"
}