当前位置: 首页 > 后端技术 > Node.js

简单的Node.js笔记--特性与模块

时间:2023-04-03 21:02:42 Node.js

读书笔记--深入Node.jsNode.js是一个基于ChromeV8引擎的JavaScript__运行环境__。Node.js使用事件驱动、非阻塞I/O模型,使其轻量且高效。——Node.js中文网络特性异步I/O在Web端。过去,大多数程序都是以同步方式编写的。串行调用下层应用数据的过程充满了串行等待时间。如果用多线程来解决这种串行等待,或多或少是一件大事。在Node中,语言级别的自然并行性在这种场景下非常有效。例如读取文件。varfs=require('fs');飞秒。readFile('/etc/passwd1',(err,data)=>{if(err)throwerr;console.log('passwd1:'+data);});fs.readFile('/etc/passwd2',(err,data)=>{if(err)throwerr;console.log('passwd2:'+data);});对于同步I/O,它们的耗时是两个任务耗时的总和,而对于异步I/O,耗时取决于最慢的文件读取时间。事件和回调由于函数是JavaScript中的一等公民,函数可以作为对象被调用,作为参数传递给方法。varhttp=require('http');varquerystring=require('querystring');http.createServer(function(req,res){varpostData='';req.setEncoding('utf8');req.on('data',function(trunk){postData+=trunk;});req.on('end',function(){res.end(postData);});}).listen(8080);console.log('服务器启动?程');单线程的优点是不需要像多线程那样关心共享状态,没有死锁,也没有线程上下文交换带来的性能开销。缺点是无法利用多核CPU,出错会导致整个应用启动(应用的健壮性值得测试),大量计算占用CPU,无法继续调用异步I/O。HTML5自定义了WebWorker的标准。WebWorkers可以创建工作线程来执行计算,解决大型JavaScript计算阻塞UI渲染的问题。工作线程为了不阻塞主线程,通过消息传递的方式传递运行结果,这也使得工作线程无法访问主线程中的UI。Node使用了和WebWorkers一样的思路来解决单线程大计算量的问题:child_process。子进程的出现,意味着Node可以从容应对单线程健壮性和无法利用多核CPU的问题。Node也可以通过编写C/C++扩展来更高效地使用CPU,通过C/C++实现一些V8无法达到极致性能的地方。与Windows和*nix平台的跨平台兼容主要是由于Node.js架构的变化。它在操作系统和Node的上层模块系统即libuv之间构建了一个平台层架构。Module模块分为核心模块和文件模块:核心模块是Node提供的模块。Node源代码在编译过程中,被编译成二进制可执行文件。Node进程启动时,直接加载了一些核心模块到内存中,所以在导入这部分核心模块时,可以省略文件定位和编译执行两步,在路径分析中判断优先级,所以它的加载速度是最快的。文件模块是用户编写的模块。运行时动态加载需要完整的路径解析、文件定位、编译执行过程,速度比核心模块慢。在一个模块中,context提供require()方法引入外部模块,并提供exports对象用于导出变量或方法。还有一个module对象,代表模块本身,exports是模块的一个属性,所以exports只能导出。一=1;exports.b=2;不能以exports={key:value}的形式导出,但是两种方式都可以通过module.exports完成。对于具有相同名称的导出属性或函数,后者会覆盖前者。//math.jsexports.add=function(){varsum=0,i=0,args=arguments,l=args.length;while(i