js异步加载

问题分析

在开发网站页面的时候经常会加载js文件,但是我们在加载js的时候会遇到js非常大或者执行事件长的情况下会出现页面短时间内白屏的现象。
这是因为web页面是按照顺序执行的然后代码一边下载浏览器一边处理,当遇到标签浏览器会先停下来去加载相应的css文件,然后加载出来,遇到<script></script>标签会看有没有src属性,如果有就下载相应的js文件然后执行js,等js执行完毕后在继续向下执行。在这种顺序执行的情况下就会出现第一段话我们说的问题。

解决方案:

  1. 我们可以把script引入的外部资源统一放到</body>标签的前边,也就是放到所有dom节点的后边。
  2. 通过给script标签增加异步加载属性
    异步加载可以使用async\defer两个属性
  3. 在前边写一个加载外部js的方法
<script>
    var script = document.createElement('script');
    script.src = 'a.js';
    document.querySelector('head').append(script);
</script>

区别

  1. <script>标签放到底部的方法是按照代码的顺序执行。
    这里主要讨论的是defer和async的区别
    defer:是浏览器遇到带有该属性的js文件后台去加载并且代码继续向下执行,然后等到页面的所有dom元素都加载完毕后在执行。
    async:是浏览器遇到带有该属性的js文件会取后台进行加载并且代码继续执行,等到js下载完毕后立即执行js并且暂停正在执行的代码,等到js执行完毕,在继续接着执行刚才暂停的代码。

暂时无法在文档外展示此内容

通过上图可以看出,如果script标签是async属性的话是js加载和html执行是同步的,但是到加载完后html停止执行,然后执行js中间会有暂停情况
而defer却是html和js的加载同时进行,然后等html加载完毕后才开始渲染执行js文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cesium是一个用于创建地球和其他天体的3D地理信息系统(GIS)可视化的开源JavaScript库。在Cesium中,异步是一种常见的技术,用于在大型数据集或复杂场景时提高性能和用户体验。 异步是指在资源时,不会阻塞主线程,而是通过并行和渲染来提高效率。在Cesium中,异步主要应用于以下几个方面: 1. 模型:Cesium支持各种3D模型格式,如glTF、COLLADA等。当大型模型时,可以使用异步来避免页面卡顿或时间过长的问题。 2. 影像:Cesium可以各种影像数据,如卫星影像、地形数据等。由于影像数据通常较大,使用异步可以提高速度和用户体验。 3. 矢量数据:Cesium支持各种矢量数据格式,如GeoJSON、KML等。当大量矢量数据时,可以使用异步来提高性能和交互响应速度。 在Cesium中,异步通常通过使用Promise对象来实现。Promise是一种用于处理异步操作的对象,它可以表示一个异步操作的最终完成或失败,并返回相应的结果。 下面是一个示例代码,演示了如何使用异步一个3D模型: ```javascript // 创建一个Promise对象 var promise = Cesium.Model.fromGltf({ url: 'path/to/model.gltf', basePath: 'path/to/assets' }); // 当模型完成后,执行回调函数 promise.then(function(model) { // 将模型添到场景中 viewer.scene.primitives.add(model); }).otherwise(function(error) { // 失败时的处理逻辑 console.log('An error occurred: ' + error); }); ``` 在上面的代码中,`Cesium.Model.fromGltf`方法返回一个Promise对象,表示模型的异步过程。通过调用`then`方法和`otherwise`方法,可以分别指定成功和失败时的回调函数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值