node解决了什么
1、实现高并发用户连接,Node.js又是通过什么方法解决掉这个问题的呢?
Node.js为了解决高并发连接问题,放弃了“为每一个用户连接创建一个新线程”的思想,改成为每一个用户连接在Node.js内部,触发一个事件。这就解决了多个用户连接耗尽服务器内存的问题。
2、实现高性能服务器
Node.js是一个用于开发各种Web服务器的开发工具。在Node.js服务器中,运行的是V8 JavaScript脚本语言。Node.js内部提供了很多的模块,大部分模块是JavaScript编写的,而其他的一些模块是通过其他底层语言编写的,V8引擎这种编译技术打破了语言不同造成的执行效率差异问题,使得我们可以忽略掉模块语言差异带来的问题。Node.js将V8引擎用到了服务器端,实现了高性能的服务器。
3、非阻塞I/O及事件循环机制
其实就是异步的JavaScript网络请求。在等待请求结果的时候,会继续执行请求后面的代码,不用等待数据返回,将请求返回的结果放在回调函数中处理。这种机制就称为非阻塞I/O机制。由于耗时任务不会阻塞后续代码,因此,大大提供了执行效率。当然,此处是以网络请求为例,但实际上事件可以是:文件的增删查改。
什么项目适合选用Node.js?
程序需要处理大量并发的输入输出时,并且再向服务端发送请求后,等待返回结果的这段时间内,不需要处理非常复杂的逻辑。
项目示例: 1)聊天服务器;同一时刻可能存在大量并发连接,而服务器端本身不存在非常复杂的处理。 2)电商类服务器:秒杀、抢购、准点开卖等场景。
总结:
Node.js编写前需要先安装一个Node.js软件,然后才能正常使用;
Node.js编写的文件也是以.js结尾的js文件,跟浏览器端编写的js文件一样;
Node.js文件运行需要使用到终端命令执行,然后才能在浏览器中呈现,而浏览器端js只需要用浏览器打开就可以;
Node.js编写代码时,常常需要引入模块,还会使用到模块提供的很多方法和属性,而浏览器端js使用的是ECMA提供的API和BOM对象提供的API,基本不需要引入模块,而且引入方式也不同,Node.js遵循common.js标准,使用require引入一个模块,而浏览器端js遵循ES modules标准,通过import引入文件或模块;
Node.js通过终端运行,不存在兼容性问题,而浏览器端JavaScript由于依赖于浏览器环境,因此浏览器不同可能会出现兼容性问题。
Node.js把一个.js文件就称为一个模块。只要这个文件是.js结尾的,它就是个Node.js模块,不管它内部的内容是JavaScript代码、还是JSON,还是编译过的C/C++扩展。
Node是如何解决:私有作用域、依赖关系管理和按需加载的呢?
Node.js以模块为单位,划分各个功能,而每一个模块是一个js文件,Node.js实现了在每一个模块中定义的全局变量和函数只能在这个模块内部使用,只有通过exports导出的对象才能传递到外部,这样就解决了私有作用域的问题。
Node.js作为JavaScript在服务端的实现,它遵循一套叫common.js的规范。每个模块都有一个全局对象module,同时module对象中有一个对象exports,使用exports对象实现模块导出。exports是module.exports对象的别名,提供便捷的属性和方法设置。
require可以加载文件模块(.js、.code、.json)和nodejs核心模块,最终获取到的是module.exports对象。**第一次加载的时候执行代码,第二次从缓存中获取module.exports对象,**如果没有发现指定模块就报错not find module。