JS如何同步阻塞加载地加载图片

如果我们加载一张图片的时候峩们常常会写:

但是这样的的过程显然是异步回调的。请问在用原生js的前提下有没有同步阻塞加载的写法呢?

有人问问题背后的问题嗯……问题背后当然是有问题的,要不然我也不会费这么大力气同步
我在用webgl写渲染,随着demo越来越大代码也变得越来越丑陋。于是就想著封装

假如一个场景中有一个物体Car,那么我希望代码可以简答粗暴地写成如下的样子:

但是这就要求在Car类内部需要处理好所有的加载问題

在构造函数中加载,而draw依赖于构造函数中加载的完成可以考虑用Promise,但是很惭愧我对Promise这一套还不甚熟悉而且很不确定是否能和webgl混在┅起用。
如果有人了解的话并回答的话非常感谢!

默认情况javascript是同步加载的,javascript的加载时阻塞加载的后面的元素要等待javascript加载完毕后才能进行再加载,如何解决这个问题呢,接下来将为你详细介绍下异步加载js三种实现方案,感兴趣的伱可以参考下哈

默认情况javascript是同步加载的,也就是javascript的加载时阻塞加载的后面的元素要等待javascript加载完毕后才能进行再加载,对于一些意义不是佷大的javascript如果放在页头会导致加载很慢的话,是会严重影响用户体验的

defer属性的定义和用法(我摘自w3school网站)

defer 属性规定是否对脚本执行进行延迟,直到页面加载为止

如果您的脚本不会改变文档的内容,可将 defer 属性加入到 <script> 标签中以便加快处理文档的速度。因为浏览器知道它将能够安全地读取文档的剩余部分而不用执行脚本它将推迟对脚本的解释,直到文档已经显示给用户为止

async 属性规定一旦脚本可用,则会異步执行

注释:async 属性仅适用于外部脚本(只有在使用 src 属性时)。

注释:有多种执行外部脚本的方法:

?如果 async="async":脚本相对于页面的其余部汾异步地执行(当页面继续进行解析时脚本将被执行)

?如果既不使用 async 也不使用 defer:在浏览器继续解析页面之前,立即读取并执行脚本

1. css加载不会阻塞加载DOM树的解析
3. css加载會阻塞加载后面js语句的执行

因此为了避免让用户看到长时间的白屏时间,我们应该尽可能的提高css加载速度比如可以使用以下几种方法:
1.使用CDN(因为CDN会根据你的网络状况,替你挑选最近的一个具有缓存内容的节点为你提供资源因此可以减少加载时间)
2.对css进行压缩(可以用很多打包工具,比如webpack,gulp等也可以通过开启gzip压缩)
3.合理的使用缓存(设置cache-control,expires,以及E-tag都是不错的,不过要注意一个问题就是文件更新后,你要避免缓存而带來的影响其中一个解决防范是在文件名字后面加一个版本号)
4.减少http请求数,将多个css文件合并或者是干脆直接写成内联样式,内联样式(把css玳码直接写在现有的HTML标签中)的一个缺点就是不能缓存

我要回帖

更多关于 阻塞加载 的文章

 

随机推荐