Node list

  • http、stream、buffer、process、thread
  • sql
  • 微服务
  • web Framework (express、koa、egg、nest)
  • Node
    • module引用
    • promise
    • 高并发、多线程、分布式
    • 运行原理

Docker list

  • docker file
  • ks8

Other list

  • shell
  • CI
  • git
  • process manager

import、import()、require()

  • import

    • 在编译时时执行,并不会分析逻辑语句,所以import必须放在文件头,否则报错
    • 不能在代码块中使用(比如:if代码块或函数中)
    • 这样的设计,固然有利于编译器提高效率,但也导致无法在运行时加载模块
    • 无法实现模块的动态加载
  • import()

    • import()函数可以用在任何地方,不仅仅是模块,非模块的脚本也可以使用
    • 它是运行时执行,也就是说,什么时候运行到这一句,才会加载指定的模块
    • import()函数与所加载的模块没有静态连接关系,这点也是与import语句不相同
    • import()类似于 Node 的require方法,区别主要是前者是异步加载,后者是同步加载
  • require()

    • 类似于import()的使用,可以在任何地方使用
    • 可以实现动态加载,但是是同步加载
  • 例子

    • import('./myModule.js').then(({export1, export2}) => {  // ...·});
      
    •   import('./myModule.js')
        .then(myModule => {
        console.log(myModule.default);
        });
      
    •  Promise.all([
        import('./module1.js'),
        import('./module2.js'),
        import('./module3.js'),
      ])
      .then(([module1, module2, module3]) => {
         ···
      });
      
    •   async function main() {
        const myModule = await import('./myModule.js');
        const {export1, export2} = await import('./myModule.js');
        const [module1, module2, module3] =
          await Promise.all([
            import('./module1.js'),
            import('./module2.js'),
            import('./module3.js'),
          ]);
      }
      

Node内存

1、64 位系统约为 1.4GB,32 位系统约为 0.7GB。

这个说的是 V8 对使用内存的限制,而且是所有可用内存。当总使用内存超过 1.4G 之后就会 OOM(Out Of Memory)。

2、Buffer 是基于 c++,不受 V8 内存限制。

Buffer 使用的内存不在 1.4G 的计算范围之内。

3、测试结果

Buffer 的长度由 Node.js 限制(而非内存空间),定义在 https://github.com/nodejs/node/blob/master/lib/buffer.js#L90-L101,当 Buffer 被创建时进行长度的判断。

–max-old-space-size=SIZE 单位M 比如:1536(1.5G)