Es-Module的加载实现

浏览器加载

传统方法

//页面内嵌的脚本
<script>
//module code
</script>

//外部脚本
<script src="./module.js></script>

默认情况下,浏览器同步加载javaScript脚本,即渲染引擎遇到

如果脚本的体积很大,下载和执行时间就会很长,因此造成浏览器堵塞,用户会感觉到到浏览器“卡死了”,没有任何响应。这显然是不好的体验,所以浏览器允许脚本异步加载,下面就是两种异步加载的语法。

<script src="module.js" defer></script>
<script src="module.js" async></script>

上面的代码中,

defer和async的区别是,前者要等到整个页面正常渲染结束才会执行,而后者一旦下载完成,渲染引擎就会中断渲染,执行这个脚本以后在渲染。另外,如果有多个defer脚本,则会按照他们子页面出现的顺序加载,而多个async脚本不能保证加载顺序的。
加载规则
浏览器加载ES6模块时也使用

<script type="module" src="foo.js><script>

这里script标签带有type="module"属性,所以浏览器知道这是一个ES6
模块。对于带有type="module"的属性

Es6模块也允许内嵌在网页中,语法行为与加载外部脚本完全一致。

<sript type="module>
import utils from "./utils.js"
//other code
</script>

对于外部的模块脚本(foo,js),有几点需要注意。

  • 代码是在模块作用域之中运行,而不是在全局作用域中运行,模块外部的顶层变量外部是不可见的。
  • 模块脚本自动采用严格模式,无论有没有声明use.strict
  • 模块中可以使用import命令加载其他模块(.js后缀不可省略,许哟啊提供绝对URL或相对URL),也可以使用export命令输出对外接口。
  • 在模块中,顶层的this关键字返回undefined,而不是指向window。也就是说,在模块顶层使用this关键字时无意义的。
  • 同一个模块如果加载多次,将只执行一次。
import utils from 'https://example.com/js/utils.js';
const x=1;

console.log(x===window.x)		//false
console.log(this===undefined)  	//true

delete x;  		//句法错误,严格模式下禁止删除变量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ES模块化是一种在JavaScript中组织和管理代码的方式。模块懒是指在需要时才模块,而不是在应用初始化时就所有模块。这种方式可以提高应用的性能和速度。 实现ES模块的懒有几种方式,下面列举了两种常见的方式: 1. 动态导入(Dynamic Import): 动态导入是ES6提供的特性,通过使用`import()`函数可以实现模块的动态。这个函数返回一个Promise,并且只有在调用时才会指定的模块。 示例代码如下: ```javascript import('./module.js') .then(module => { // 使用的模块 module.someFunction(); }) .catch(error => { // 处理错误 }); ``` 在需要使用某个模块时,可以调用`import()`函数来动态该模块,并在`then`回调中使用的模块。这样可以延迟模块的,并且只在需要时才进行。 2. 懒库或工具: 除了使用ES6的动态导入,还可以使用一些第三方库或工具来实现模块的懒。这些库或工具通常提供了更多的功能和灵活性,例如按需、预等。 一些常用的懒库包括: - webpack的`import()`函数和`React.lazy()`函数结合使用,可以实现React组件的懒。 - Vue.js的`@babel/plugin-syntax-dynamic-import`插件可以实现Vue组件的懒。 - require.js是一个通用的模块器,可以实现模块的按需。 需要注意的是,模块懒虽然可以提高应用性能,但也需要权衡时间和用户体验。过多的懒可能会导致页面响应变慢或出现延迟,因此在实际使用中需要根据具体情况进行优化和选择适当的懒策略。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值