什么是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. OpenStack-Neutron-VPNaaS-代码

    目前juno只支持ipsec的vpn  但是其实稍微修改代码pptp/openvpn/gre也都是可以支持的,下面看看vpn服务的代码流程: 默认我们创建好了ide策略.ipsec策略和vpn服务,因 ...

  2. 利用Team@OSC进行团队协作开发平台

    利用Team@OSC进行团队协作开发平台 Team@OSC介绍 Team@OSC 是一个团队协作开发平台,轻松管理轻量级团队.代码运行平台(PaaS).代码质量检查应有尽有. 链接:https://t ...

  3. 选择排序java实现

    package text.algorithm; /** * 选择排序 * O(n^2);空间复杂度O(1); */public class SelectionSort { public static ...

  4. SQL并发处理方案——乐观锁和悲观锁

    (一)乐观锁和悲观锁的概念 悲观锁 在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”)是一种并发控制的方法.它可以阻 ...

  5. Java集合类学习笔记2

    二,具体的集合 集合类型 描述 ArrayList 一种可以动态增长和缩减的索引序列 LinkedList 一种可以在任何位置进行高效地插入和删除操作的有序序列 ArrayDeque 一种用循环数组实 ...

  6. nodejs笔记之连接mysql数据库

    1.安装mysql模块: npm install mysql 2.引入mysql模块 创建一个server.js文件 const http = require("http"); c ...

  7. 外网登录访问树莓派 Raspberry Pi

    外网登录访问树莓派 Raspberry Pi 本地的树莓派 Raspberry Pi,只能在局域网内访问,怎样从公网也能登录访问树莓派 Raspberry Pi? 本文将介绍具体的实现步骤. 1. 准 ...

  8. cxgrid 非编辑状态下复制当前列的值 真折腾人

    1.自带的CTRL +C 只能复制整行,不知是不是版本问题. 2.有分组这个代码就不行了 s:= G1DBView.DataController.Values[G1DBView.Controller. ...

  9. 软件包管理(rpm,yum)

    软件包管理相关软件: 软件包管理器的核心功能: .制作软件包 .安装,卸载,升级,查询,效验 Redhat ,SUSE : RPM Debian :dpt 依赖关系; 前端工具;yum ,apt-ge ...

  10. 算法(第四版)C# 习题题解——2.1

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...