最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Node的模块儿查找机制

    正文概述 掘金(terrence386)   2021-04-08   472

    没有苦难的人生么有任何意义,为中华民族的伟大复兴而读书。

    前情回顾

    上篇文章主要分享了的一个commonJS规范的问题,那么今天接着昨天的话题继续聊一聊nodejs的模块儿查找机制

    Node模块儿

    在Node中引入模块,大致会经历这么几个过程:

    • 路径分析
    • 文件定位
    • 编译执行

    在Node中,模块儿可以分为两大类,一类是Node提供的模块成为核心模块;另一类是用户编写的模块,成为文件模块

    核心模块在Node源码编译的过程中,编译进了二进制执行文件中。当Node进程启动时,核心模块儿会直接被加载到内存中,所以核心模块引入时,文件定位和编译执行这两个步骤可以忽略掉,并且在路径分析中会优先判断,所以核心模块的加载速度是最快的

    文件模块则是在运行中动态加载,需要完整的路径分析,文件定位,编译执行过程,加载速度比核心模块会慢一些。

    模块儿加载过程

    • 优先从缓存中加载

    Node对引入过的文件都会进行缓存,用来减少二次引用时的开销。与浏览器缓存不同的是,浏览器缓存的是文件,Node缓存的是编译和执行后的对象。

    不论是核心模块还是文件模块,相同模块儿的二次加载都采用缓存优先的方式。但是核心模块的缓存检查优先级高于文件模块的缓存检查

    路径分析和文件定位

    不同的标识符,模块的查找及定位也有不同程度的差异。

      1. 模块标识符分析
      • 核心模块儿如 http,fs,path...
      • 绝对路径或相对路径
      • 自定义模块儿 或者可以理解为npm包

      核心模块的优先级仅次于缓存加载,它在Node源码中已经编译成二进制代码,所以其加载速度最快。

      绝对路径或相对路径这类标识符通常是我们自己写的文件模块儿,require()方法会将路径转为真实路径,并且以真实路径作为索引,将编译后的结果存放到缓存中,方便下载加载时更快。

      自定义模块儿 或者可以理解为npm包。 这类模块查找是最慢的,具体过程是这样的:当前目录的node_modules文件夹-->父目录下的node_modules文件夹-->递归查找父目录的node_modules-->直到根目录下的node_modules 这过程跟JS的作用域链有些类似,但是文件层级越深,查找越耗时。

      1. 文件定位

      优先从缓存加载的策略时二次加载的效率得到了很大的提升,但是还需要考虑一些别的细节,比如:文件扩展名,目录的处理包的处理等等

      默认require()方法中的标识符不带扩展名,这种情况下Node会按照.js,.json,.node的顺序依次补足扩展名,依次尝试。

      这个过程中fs模块儿会同步阻塞式的判断文件是否存在。因为Node是单线程,所以会有一些性能上的问题,所以如果是json文件,带上扩展名,会多少提高一些性能。

      在分析标识符的过程中,require()通过分析扩展名之后,可能没有查到对应文件,但是却得到一个目录,此时Node会将这个目录当做一个包来处理。然后查找package.json,通过JSON.parse()解析出描述对象,然后从main属性指定的文件进行定位查找。没有扩展名则补齐扩展名,如果整个过程全布走完依然没有找到目标文件,则抛出异常。

    下一篇简单聊一下模块如何编译及npm的相关知识点

    总结

    • 优先从缓存加载
    • 递归查找

    最后说两句

    1. 动一动您发财的小手,「点个赞吧」
    2. 动一动您发财的小手,「点个在看」
    3. 都看到这里了,不妨 「加个关注」
    4. 不妨 「转发一下」,好东西要记得分享
    点击关注公众号

    起源地下载网 » Node的模块儿查找机制

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元