async/await实现图片的串行、并行加载

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>es6</title>

<style>

img {

width: 100%;

}

</style>

</head>

<body>

<script>

// Promise加载图片

var loadImg = (url) => {

return new Promise((resolve, reject) => {

// 创建图片

var img = new Image()

// 加载成功

img.onload = () => {

resolve(img)

}

// 图片加载

img.onerror = () => {

reject(new Error(‘图片加载失败‘))

}

img.src = url

})

}

var imgs = [‘http://img4.duitang.com/uploads/item/201411/09/20141109142633_ncKBY.thumb.700_0.jpeg‘,

‘https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1538658203&di=2405d72f77c748c885064770074fed77&imgtype=jpg&er=1&src=http%3A%2F%2Fp1.gexing.com%2Ftouxiang%2F20120801%2F0038%2F50180a1634e49_200x200_3.jpg%3Frecache%3D20131108‘,

‘http://img3.imgtn.bdimg.com/it/u=2423321859,2979330058&fm=27&gp=0.jpg‘

]

// 并行加载

var loadImgAsync = (imgs)=>{

imgs.forEach(async (item)=>{

let img = await loadImg(item)

document.body.appendChild(img)

})

}

loadImgAsync(imgs)

// 串行加载

var ImgAsync = async (imgs) => {

for (var i = 0; i < imgs.length; i++) {

let img = await loadImg(imgs[i])

document.body.appendChild(img)

}

}

ImgAsync(imgs)

</script>

</body>

</html>

原文地址:https://www.cnblogs.com/2oex/p/9718596.html

时间: 2024-10-09 19:47:19

async/await实现图片的串行、并行加载的相关文章

【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例(转载)

(1)GCD实现的同步异步.串行并行. ——同步sync应用场景:用户登录,利用阻塞 ——串行异步应用场景:下载等耗时间的任务 /** * 因为是异步,所以开通了子线程,但是因为是串行队列,所以只需要开通1个子线程(2),它们在子线程中顺序执行.最常用. */ -(void)gcdDemo1{ dispatch_queue_t q1=dispatch_queue_create("com.hellocation.gcdDemo", DISPATCH_QUEUE_SERIAL); for

GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例

转:http://www.tuicool.com/articles/NVVnMn (1)GCD实现的同步异步.串行并行. ——同步sync应用场景:用户登录,利用阻塞 ——串行异步应用场景:下载等耗时间的任务 /** * 因为是异步,所以开通了子线程,但是因为是串行队列,所以只需要开通1个子线程(2),它们在子线程中顺序执行.最常用. */ -(void)gcdDemo1{ dispatch_queue_t q1=dispatch_queue_create("com.hellocation.gc

iOS多线程——同步异步串行并行

串行并行异步同步的概念很容易让人混淆,关于这几个概念我在第一篇GCD中有解释,但是还不够清晰,所以这里重写一篇博客专门对这几个概念进行区分: 先说一下队列和任务: (1)队列分为串行和并行,任务的执行分为同步和异步,异步是多线程的代名词,异步在实际引用中会开启新的线程,执行耗时操作. (2)队列只是负责任务的调度,而不负责任务的执行,任务是在线程中执行. 以上两点对了解串行.并行.同步.异步非常重要! 再说一下队列和任务的特点: (1)串行队列:任务按照顺序被调度,前一个任务不执行完毕,队列不会

js的并行加载以及顺序执行

重新温习了下这段内容,发现各个浏览器的兼容性真的是搞大了头,处理起来很是麻烦. 现在现总结下并行加载多个js的方法: 1,对于动态createElement('script')的方式,对所有浏览器都是异步并行加载的.这里所说的并行不仅仅指的是 js并行加载,也包括js和其他资源比如图片,iframe的加载.但是此种方式在Firefox的2.0 3.0 3.1版本和opera 9.63 下是可以顺序执行的.但是由于Kyle的提议,现代浏览器都可以通过对动态创建的script元素设置属性async=

head.js让网站并行加载但顺序执行JS

http://headjs.com/ 并行加载JS,但是执行的时候却按顺序执行,提高网站速度 <script src="js/head.min.js"></script> <script type="text/javascript"> head.js("js/jquery-1.6.1.min.js","js/jquery.validate.min.js","js/my_valida

OpenJDK类加载实现浅析#3:并行加载

今天来看下OpenJDK类加载中关于并行加载的一些代码.还是一样要分别看看类加载库跟虚拟机,因为二者在这方面仍然是需要配合完成的. 类加载库所做的工作 在JDK7之前,ClassLoader#loadClass方法是synchronized的, protected synchronized Class<?> loadClass(String name, boolean resolve) 也就是说,类加载的时候,直接是要锁住整个classloader的. 到了JDK7,这个地方终于做出了优化,直

js顺序加载与并行加载

前端优化过程中常提到js的加载方式,下面说下几种常用的加载方式: 1:head标签内插入<script>标签 <script type="text/javaScript" src="test.js"></script> 这是最常见的方法,但是这个方法有个最大的问题,就是当浏览器解析到<script>标签时,浏览器会停止解析其后的内容,而优先下载脚本文件,并执行其中的代码,是个阻塞的过程,这意味着,其后的test.css

js的并行加载与顺序执行

javaScript文件(下面简称脚本文件)需要被HTML文件引用才能在浏览器中运行.在HTML文件中可以通过不同的方式来引用脚本文件,我们需要关注的是,这些方式的具体实现和这些方式可能会带来的性能问题. 当浏览器遇到(内嵌)<script>标签时,当前浏览器无从获知javaScript是否会修改页面内容.因此,这时浏览器会停止处理页面,先执行javaScript代码,然后再继续解析和渲染页面.同样的情况也发生在使用 src 属性加在javaScript的过程中(即外链 javaScript)

使用jquery插件实现图片延迟加载技术(懒加载)

有时我们看到一些大型网站,页面如果有很多图片的时候,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对于比较长的页面来说,这个方案是比较好的. 这里推荐使用jquery图片延迟加载插件jquery.lazyload实现图片延迟加载提高网站打开速度 下载地址:http://www.appelsiini.net/download/jquery.lazyload.js 修正版:jquery.lazyloa