V8引擎,JS,Node,Npm介绍

1、V8引擎===JS引擎,主要是用来解析js语言的;

2、Node提供运行Js的环境,本质上用的就是V8引擎;

3、Npm就是一个包管理工具,现在和Node捆绑使用。

V8是如何运行的?

编程语言:静态类型,动态类型

静态类型:c++,go(提前编译变成机器码再执行,编译器)生成机器码

动态类型:js,python(在运行时进行编译执行,解释器)8v=解释器 生成字节码

V8执行过程:Parser(解析器)、Ignition(解释器) 和TurboFan(编译器) 来执行Js代码。

1、parser生成抽象语法数

1.1、词法分析:

var name = 'pp';关键字var,标识符name,赋值运算符=,字符串pp,分隔符;一共5个token

1.2、语法分析

token根据语法规则,形成AST

2、Ignition生成字节码

 

字节码是机器码的抽象,可以看作是小型的构建块,这些构建块组合到一起构成任何JavaScript功能。字节码比机器码占用更小的内存,这也是为什么V8使用字节码的一个很重要的原因。字节码不能够直接在处理器上运行,需要通过解释器将其转换为机器码后才能执行。

通过上图可以看出,Ignition把前一步得到的AST通过字节码生成器经过一些列的优化生成字节码。

在这个过程中:

  • Register Optimizer: 主要是避免寄存器不必要的加载和存储;
  • Peephole Optimizer: 寻找直接码中可以复用的部分,并进行合并;
  • Dead-code Elimination: 删除无用的代码,减少字节码的大小

通过上面三个过程的优化进一步减小字节码的大小并提高性能,最后Ignition执行优化后的字节码。

3、执行代码并优化

Ignition执行上一步生成的字节码,并记录代码运行的次数等信息,如果同一段代码执行了很多次,就会被标记为 “HotSpot”(热点代码),然后把这段代码发送给 编译器TurboFan,然后TurboFan把它编译为更高效的机器码储存起来,等到下次再执行到这段代码时,就会用现在的机器码替换原来的字节码进行执行,这样大大提升了代码的执行效率。

另外,当TurboFan判断一段代码不再为热点代码的时候,会执行去优化的过程,把优化的机器码丢掉,然后执行过程回到Ignition。

参考自:

浅析V8引擎,让你更懂JavaScript! - 知乎

 Node

Node的特点: I/O无阻塞,事件驱动

Node主要有几个模块: fs, path, events, http, unils

1、fs模块:操作文件系统的API;

fs.readFile(filename,[options],callback); 读取文件。
fs.writeFile(filename,data,[options],callback);写文件。
fs.appendFile(filename,data,[options],callback);以追加的方式写文件。
fs.open(filename,flags,[mode],callback); 打开文件。
filename:文件名,必须。
data:写入的数据或者buffer流。
flags:操作标识,打开方式,r w。
[options]:指定权限,读、写、执行。是否可续写。
callback:读取文件后的回调函数。function(err,data);
fs.mkdir(path,[mode],callback);创建目录。
fs.readdir(path,callback);读取目录。
fs.exists(path,callback);查看文件与目录是否存在。
fs.utimes(path,atime,mtime,callback);修改文件的访问时间和修改时间。
fs.rename(oldfilename,newfilename,callback);重命名文件名或者目录。
fs.rmdir(path,callback);删除空目录。
path:被创建目录的完整路径以及目录名。
[mode]:目录权限,默认0777(可读可写可执行)。
atime:新的访问时间。
ctime:新的修改时间。
oldfilename、newfilename  旧名字和新名字。
callback:创建完目录后的回调函数。

2、path模块:处理文件路径;

path.normalize(路径解析,得到规范路径);
path.join(路径合并);
path.resolve(获取绝对路径);
path.relative(获取相对路径)。

3、events模块:只提供了一个对象:events.EventEmitter

EventEmitter 的核心就是事件触发与事件监听器功能的封装。

4、http模块:

http.createServer(function(){});创建服务器。
http.get('路径',callback);发送get请求。
http.request(options,callback);发送请求。
options:options是一个类似关联数组的对象,表示请求的参数,callback作为回调函数,需要传递一个参数。
options常用的参数有host、port(默认为80)、method(默认为GET)、path(请求的相对于根的路径,默认是“/”。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js 是一个基于 Chrome V8 引擎JavaScript 运行环境。npmNode.js 的包管理器,用于下载和安装第三方模块。以下是 Node.jsnpm 的安装配置步骤: 1. 下载 Node.js 安装包:从官网 https://nodejs.org/en/ 下载适合自己系统的安装包,选择 LTS 版本即可。 2. 安装 Node.js:双击下载的安装包,按照提示一步步安装即可。 3. 验证 Node.js 是否安装成功:在命令行中输入 node -v,如果出现版本号则说明安装成功。 4. 配置 npmNode.js 安装完成后,npm 已经自动安装在本地,可以在命令行中输入 npm -v 验证是否安装成功。 5. 切换 npm 源为淘宝镜像:npm 安装包默认使用的是国外的源,下载速度较慢。可以使用淘宝镜像加速 npm 的下载。在命令行中输入 npm config set registry https://registry.npm.taobao.org/ 即可。 6. 配置全局安装目录:npm 默认的全局安装目录是 /usr/local/lib/node_modules,但是这个目录需要 root 权限才能访问。可以将全局安装目录切换到自己的 home 目录下,比如 ~/.npm-global。在命令行中输入 npm config set prefix '~/.npm-global',然后将路径添加到 PATH 环境变量中,即可使用全局安装的模块。 7. 验证全局安装目录是否生效:在命令行中输入 npm config get prefix,如果输出的路径为 ~/.npm-global,则说明全局安装目录已经生效。 以上是 Node.jsnpm 的安装配置步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值