什么是Promise

  Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。(摘抄自 阮一峰老师的 ECMAScript 6 入门)。具体请查看阮一峰老师的这部书,写得很棒!

Promise.all

  Promise.all 方法主要用于将多个Promise实例,包装成一个新的Promise 数组实例。接受的是一个数组作为参数。

const results = Promise.all([p1,p2,p3]);

上图中 p1, p2, p3 分别都是Promise的实例。 results 是3个Promise 返回的一个数组集合。

在实际中的使用

对于Promise.all 的使用感受。主要是之前项目中需要调用淘宝的生成淘口令的接口。

 以此为背景:有一个数组 response , 其中每个元素 都是一个Object对象,是淘宝商品的信息。因为每个商品都要 调用 淘口令的接口去生成淘口令。

response 的Length = 30

  

用for 去做循环,请求了30次  淘口令的接口去生成淘口令。 时间花了 1万毫秒。 才30条数据,这时间耗时也太长了吧!! 这是不能接受的。

采用 Promise.all 优化

同样是30条数据, 速度提升快20倍!!!

原因

  30条数据中,如果用for循环,需要请求30次接口,每次都需要前一个执行完,下一个才能开始执行。就好像30个人排成一个队伍,挨个进入地铁口。当数据量的时候,耗时得多久,相比这个不用说了。

其实。30条数据,都是独立个体,即每个结果都不会影响到其他的Object. 那么可以一次性进行30个请求。

  刚好Promise.all可以做到这点。Promise.all 则类似,一个入口可以一次性 进入30个人。

  图中的代码,我把请求淘口令的方法 抽出来做成一个异步方法, 参数是 Object。即每个商品的对象, 然后 把30个异步方法,放入一个array中, 因为Promise.all 接受的是一个数组作参数。

这样就可以一次性请求30个异步。速度提升了不少!

给自己的感悟

  以前在写代码的时候,并没有去注意这些细节或者考虑得比较深远点, 这次的经历给我的感悟比较深刻,在实现代码中,如考虑得深入一点,则能大大提高代码能力的和程序的性能,这对我日后的工作比较影响深远

  如有错误,请各位大佬批评指出,让我看到自己的缺点,并加以改善,更进一步!谢谢!

  

深深感受 Promise.all 带来的速度提升的更多相关文章

  1. 如何将 iOS 工程打包速度提升十倍以上

    如何将 iOS 工程打包速度提升十倍以上   过慢的编译速度有非常明显的副作用.一方面,程序员在等待打包的过程中可能会分心,比如刷刷朋友圈,看条新闻等等.这种认知上下文的切换会带来很多隐形的时间浪费. ...

  2. M内核迎来大BOSS,ARM发布Cortex-M55配NPU Ethos-U55 ,带来无与伦比的性能提升

    说明: 全球顶级嵌入式会展Embedded Word2020这个月底就开了,各路厂家都将拿出看家本领. 先回顾下去年的消息: 1.去年年初的时候ARM发布Armv8.1-M架构,增加了Arm Heli ...

  3. Next.js 7发布,构建速度提升40%

    Next.js团队发布了其开源React框架的7版本.该版本的Next.js主要是改善整体的开发体验,包括启动速度提升57%.开发时的构建速度提升40%.改进错误报告和WebAssembly支持. \ ...

  4. Webpack5构建速度提升令人惊叹,早升级早受益

    为什么要升级? webpack4用的好好的,运行稳定,为什么要升级到webpack5, 每次升级,都要经历一场地震,处理许多loader和plugin API的破坏性改变. 请给我们一个充分的升级理由 ...

  5. iGear 用了这个小魔法,模型训练速度提升 300%

    一个高精度AI模型离不开大量的优质数据集,这些数据集往往由标注结果文件和海量的图片组成.在数据量比较大的情况下,模型训练周期也会相应加长.那么有什么加快训练速度的好方法呢? 壕气的老板第一时间想到的通 ...

  6. 一句话爆破速度提升一千倍python脚本

    这个脚本是接地提供的思路,一句话爆破速度提升一千倍,看了他的帖子然而没有看到工具,思路很牛逼,我提供一个Python脚本本地测试了下,十万密码只需要3秒,速度还是可以的 # coding:utf-8 ...

  7. 使用Apache Spark 对 mysql 调优 查询速度提升10倍以上

    在这篇文章中我们将讨论如何利用 Apache Spark 来提升 MySQL 的查询性能. 介绍 在我的前一篇文章Apache Spark with MySQL 中介绍了如何利用 Apache Spa ...

  8. memcache 与 redis 为web app 带来的性能提升

    memcache 与 redis 为web app 带来的性能提升 参考: 1. http://www.cnblogs.com/ToDoToTry/p/3513688.html

  9. 阿里云maven仓库地址,速度提升100倍

    参照:https://www.cnblogs.com/xxt19970908/p/6685777.html maven仓库用过的人都知道,国内有多么的悲催.还好有比较好用的镜像可以使用,尽快记录下来. ...

随机推荐

  1. Linux基础命令---iostat显示设备状态

    iostat iostat指令用来显示cpu状态,系统IO设备的状态,以及相关磁盘和NFS使用状态.iostat命令通过观察设备相对于其平均传输速率的活动时间来监视系统输入/输出设备负载.iostat ...

  2. MariaDB与MySQL

    一.MariaDB安装部署 tar zxvf mariadb-5.5.31-linux-x86_64.tar.gz mv mariadb-5.5.31-linux-x86_64 /usr/local/ ...

  3. maven 项目连接mysql8.0版本时的注意事项

    MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 以前的maven项目,要注意依赖的注入 查看pom. ...

  4. 通过本质看现象:关于Integer受内部初始化赋值范围限制而出现的有趣现象

    左手代码,右手文章.——朱季谦 这是我的第一篇技术博客,作为一名技术小菜鸟,总体而言显得很拙见,但也算是成长路上的一个小脚印,希望能在以后的日子里,可以对JAVA技术有一个更加深入的思考与认识. 前几 ...

  5. vue学习笔记—bootstrap+vue用户管理

    vue,读音view,简单易用的前端框架.特点如下: 1.一个mvvm的前端框架,内部做好了html中dom对象和后台用js语言定义的变量的双向绑定 2.中国人尤雨溪维护的个人项目,中文资料多,和go ...

  6. img添加预加载图片

    < img src="images/logo.png" onerror="javascript:this.src='images/logoError.png';&q ...

  7. 自动弹出pickerview

    UIPickerView是开发中常用的控件,日期选择.年龄选择.城市的多级联动等等都会使用,它一般是在点击某个按钮后出现,展现方式和UITextView一样,从页面底部弹出,选中后或者点击控件以外区域 ...

  8. 算法(第四版)C# 习题题解——2.2

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更为方便的版本见:http ...

  9. 页面适配的小栗子 - github

    我模拟了一个QQ音乐的radiostation页面,用了媒体查询以及流式布局,页面大部分内容是js根据json生成的,使用了less来编写css样式表. 下面是仓库地址,感兴趣的小伙伴可以打开看看,将 ...

  10. AI illustrator 如何裁剪图片(扣取局部区域)

    AI如何裁剪图片 在使用illustrator的过程中,很多亲想要AI的裁剪功能与ps一样强大,但是AI常用的裁剪图片方法如下. 工具/原料  illustrator cs6 应用剪切蒙版剪切图片   ...