es6,commonJS模块加载方法比较

1.传统方法:
        默认情况下,浏览器是同步加载 JavaScript 脚本,渲染引擎遇到<script>标签就会停下来,等执行完脚本,再继续向下渲染。
        如果是外部脚本,还要加入脚本下载的时间。
        总结:停下渲染,(下载脚本)执行脚本,继续渲染;
        弊端:脚本体积大,下载和执行时间长,浏览器‘卡死’
        解决方法: defer和async属性 ,渲染引擎遇到这一行命令,就开始下载外部脚本,但不会等它下载和执行,而直接执行后面的命令。
        defer和async区别:defer是渲染完再执行,多个defer脚本会顺序执行
                                        async是下载完就执行(渲染中断),不能保证是否顺序加载
        
    2.es6的加载:type="module"都是异步加载
        <script type="module" src="./foo.js"></script>
        <!-- 等同于 -->
        <script type="module" src="./foo.js" defer></script>
    3.es6模块和CommonJS的区别
        CommonJS模块输出的是一个值的拷贝,es6模块输出的是值的引用(commonjs的内部变化不会影响这个值)
        CommonJS模块是运行时加载,es6模块是编译时输出的接口
        CommonJS加载的是一个对象,该对象是运行时生成;es6模块不是对象,对外接口是代码静态解析就完成
        ES6 模块之中,顶层的this指向undefined;CommonJS 模块的顶层this指向当前模块
    4.Node加载
         Node 要求 ES6 模块采用.mjs后缀文件名。
        只要脚本文件里面使用import或者export命令,就必须采用.mjs后缀名。
        require命令不能加载.mjs文件,只有import命令才可以加载.mjs文件。
        反过来,.mjs文件里面不能使用require命令,必须使用import。

        ---------------------------------------------------个人声明:学习笔记,来自于http://es6.ruanyifeng.com/#docs/module-loader

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值