本教程操作环境:windows7系统、nodejs 12.19.0版,dell g3电脑。
node.js 是一个基于chrome javascript 运行时建立的一个平台,是 让javascript 运行在服务端的开发平台,它让javascript成为与php、python、perl、ruby等服务端语言平起平坐的脚本语言。
node.js是一个事件驱动i/o服务端javascript环境,基于google的v8引擎,v8引擎执行javascript的速度非常快,性能非常好。
node.js用于方便地搭建响应速度快、易于扩展的网络应用。
运行时是什么?
所谓运行时,就是程序在运行期间需要依赖的一系列组件或者工具;把这些工具和组件打包在一起提供给程序员,程序员就能运行自己编写的代码了。
对于 javascript 来说,它在运行期间需要依赖以下组件:
1) 解释器
javascript 是一种脚本语言,需要一边解释一边运行,用到哪些源代码就编译哪些源代码,整个过程由解释器完成。没有解释器的话,javascript 只是一堆纯文本文件,不能被计算机识别。
2) 标准库
我们在 javascript 代码中会调用一些内置函数,这些函数不是我们自己编写的,而是标准库自带的。
3) 本地模块
所谓本地模块,就是已经被提前编译好的模块,它们是二进制文件,和可执行文件在内部结构上没有什么区别,只是不能单独运行而已。这些本地模块其实就是动态链接库(在 windows 下是 .dll 文件),如果你使用过c语言、c++ 等编译型语言,那你应该能够更好地理解它。
javascript 的很多功能都需要本地模块的支持,比如:
cookie 用于存储少量的用户数据,它是用户计算机上的一种小文件,使用 cookie 必须有文件操作模块的支持。
ajax 可以借助互联网从服务器请求数据,这是一种网络操作,必须有网络库的支持。
一步一步跟踪代码的执行流程,从中发现逻辑错误,这个过程叫做调试,需要有调试器(debugger)的支持。
javascript 可以操作 html,这需要 html 解析模块提前构建起 dom 树。
本地模块一般封装了通用功能,对性能要求较高,所以通常使用编译型语言来实现,比如c语言、c++、汇编语言等。
javascript 解释器需要本地模块的支持,标准库在编写时也会调用本地模块的接口,而我们编写的 javascript 代码一般不会直接使用本地模块,所以 web 前端程序员触及不到它们。
本地模块是幕后英雄,它不显山露水,但是又不可或缺。
总结
解释器、标准库、本地模块等各种组件/工具共同支撑了 javascript 代码的运行,它们统称为 javascript 运行时。
在 node.js 之前,javascript 运行时被绑定在浏览器中,作为浏览器的各种模块出现。这意味着,要想运行 javascript 代码就必须启动浏览器,javascript 逃不出浏览器的手掌心,它的功能受到很大的限制,只能作为网页脚本使用。
node.js 的组成
node.js 运行时主要由 v8 引擎、标准库和本地模块组成,尤其是本地模块的多少,从底层决定了 node.js 功能的强弱。
1) v8 引擎
v8 引擎就是 javascript 解释器,它负责解析和执行 javascript 代码。
v8 引擎借鉴了 java 虚拟机和 c++ 编译器的众多技术,它将 javascript 代码直接编译成原生机器码,并且使用了缓存机制来提高性能,这使得 javascript 的运行速度可以媲美二进制程序。
2) 本地模块
node.js 集成了众多高性能的开源库,它们使用 c/c++ 语言实现,比如:
模块 说明
libuv 一个跨平台的、基于事件驱动的异步 i/o 库。但是 libuv 不仅限于 i/o,它还提供了进程管理、线程池、信号处理、定时器等其它功能。
linux 中一切皆文件,这里的 i/o 不仅仅包括文件读写,还包括数据库读写、网络通信(socket)等。
nmp node.js 包管理器,可以下载包、安装包、卸载包、更新包、上传包等。
http_parser 一款由c语言编写的轻量级 http 解析器,用以支持 web 应用开发。
zlib 工业级的数据压缩/解压模块,nodejs 借助 zlib 来创建同步、异步或者流式的压缩/解压接口。
openssl 该模块提供了经过严密测试的许多加密/解密功能,现代 web 依赖这些功能来实现安全性,比如 ssl 协议和 https 协议。
c-ares 异步 dns 查询和解析库。
node.js 直接在计算机上运行 javascript 代码,并且要赋予 javascript 强大的能力,所以它的本地模块和浏览器中的运行时有很多大区别,甚至说几乎没有什么关联。node.js 几乎完全抛弃了浏览器,自己从头构建了一套全新的 javascript 运行时。
3) 标准库
本地模块使用 c/c++ 编写,而 node.js 面向 javascript 开发人员,所以必须要封装本地模块的 c/c++ 接口,提供一套优雅的 javascript 接口给开发人员,并且要保持接口在不同平台(操作系统)上的一致性。
这套 javascript 接口,就是 node.js 标准库。标准库是否优雅和强大,决定了 node.js 的易用性,直接影响 node.js 的市场表现。
更多node相关知识,请访问:nodejs 教程!
以上就是nodejs是哪个平台的详细内容。
