美文网首页
Node学习之笔录

Node学习之笔录

作者: 小石头糖糖 | 来源:发表于2021-04-11 10:14 被阅读0次

    一、Node背景

    1、技术栈:
    http、js、es6、命令行

    2、定义:
    Node不是一门语言, 是用js编写的一种基于v8引擎的事件驱动、非I/O阻塞的技术

    3、工作原理:
    一个CPU只开一个进程, 一个进程中只有一个线程(event loop);
    (单线程只针对主进程, CPU有几个核, 就启几个进程)

    4、高性能前提:
    Web场景下、 I/O操作密集

    5、使用场景:
    1)、Web Server
    2)、 本地代码构建
    3)、 使用工具开发 (爬虫)

    6、引申概念:

    1、进程: 进行中的程序 (计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位);
    2、线程: 进程内相对独立的、可调度的执行单元, 与同属一个进程的线程共享资源;
    3、阻塞I/O: (input/output) 性能慢: 逐条顺序执行, 待底层操作完成并返回后进行下一步;
    4、非阻塞: 不等待, 立即返回
    5、操作分类:
    - 1). CPU: 压缩、解压、加密、解密;
    - 2). GPU: 图形计算;
    - 3). I/O: 文件操作、数据库、网络操作;

    二、环境

    ( 可通过npm root -g查看根路径安装位置 )

    1、commonJS规范:
    1)、 每个文件都是一个模块,有自己的作用域;
    2)、 在模块内部module变量代表模块本身;
    3)、module.exports属性代表模块对外的接口

    2、require规则:
    1)、 /表示绝对路径, ./代表相对路径;
    2)、 支持 js /json /node, 如果不写, 会默认依次尝试;
    3)、 不写后缀则认为是build-in模块或各级node-modules内的第三方模块
    (如内置模块: fs, 第三方模块: chalk)

    3、require特性:
    1)、 加载模块时所有语句都会被执行, 加载后会缓存内容;
    2)、 一旦出现某个模块被循环加载,就只输出已执行部分,未执行部分不会被加载(要避免);

    4、exports和module.exports区别:
    见于( function( exports, require, module, __filename, __dirname ){ ... } )中,
    exports可以看作是module.exports的快捷方式引入, 相当于:
    const exports = module.exports;
    exports可以给其添加属性, 但应注意不能修改其指向 !

    5、golbal:
    默认常用方法: CommonJS、Buffer、process、console、timer
    const { argv, argv0, execArgv、execPath} = process;
    const {env} = process;
    timer中有一个新增方法: setImmediate, 其与时间无关, 只有一个参数, 与nextTick 方法很像, 执行顺序: nextTick > setTimeout > setImmediate

    • nextTick: 插入队尾, 其中可嵌套使用, 会导致无法执行下一步;
    • setImmediate: node优化版本中提供, 会插入下一个队列首部, 更推荐使用;

    三、调试

    1、vscode: (需一些额外的配置)
    2、Inspector:

    1. 运行: node --inspect xx.js, 为方便调试, 参数可用--inspect-brk会在入口停下来;
    2. 打开浏览器 chrome://inspect 中Remote Target会新增target, 点击inspect即可;

    相关文章

      网友评论

          本文标题:Node学习之笔录

          本文链接:https://www.haomeiwen.com/subject/sgfakltx.html