async

在浏览器中使用ES6的模块功能 import 及 export

不羁岁月 提交于 2019-12-05 22:55:12
感谢英文原作者 Jake Archibald 的技术分享 各个浏览器对于ES6模块 import 、 export的支持情况 Safari 10.1. Chrome 61. Firefox 54 – behind the dom.moduleScripts.enabled setting in about:config. Edge 16. ES6 import 和 export 在浏览器当中的使用 1.显示声明type="module" script 里面要加 type="module", 这样浏览器才会把相关的代码当作ES6的module 来对待 <script type="module"> import {addTextToBody} from './utils.js'; addTextToBody('Modules are pretty cool.'); </script> 2.不能写“裸”路径如: <script type="module"> import {addTextToBody} from 'utils.js'; // error addTextToBody('Modules are pretty cool.'); </script> 直接写 'utils.js' 会报错 你可以写绝对路径和相对路径, 但是不能直接写文件名,即使是同一层级下面的文件。也要加上 '.

iOS开发多线程GCD(二)

笑着哭i 提交于 2019-12-05 20:10:46
上一章我们简单介绍了iOS多线程,本章我们讲解GCD多线程 GCD (Grand Central Dispatch) 是 iOS 多任务的核心。在 Mac OS X 10.6 雪豹中首次推出,后被引入到了 iOS 4.0 中。GCD 是基于 C 的 API,是底层的框架,因此效率最高 一、分组管理 /* 分组的主要目的 是判断一组操作 是否全部执行结束 原理 将需要执行的操作 添加到同一个分组下 如果其中的某一个操作结束 就会组中移除 当组里面的操作数变为0的 说明所以的操作全部结束 */ //1.创建一个分组 管理任务 dispatch_group_t myGroup = dispatch_group_create(); //2.获取一个队列 管理的任务放在哪一个线程中来管理 //主队列就表示任务放在主线程中 自定义队列就表示任务放在分线程中(子线程) //dispatch_queue_t 表示一个队列表示获取一个队列表示获取一个队列全局队列 官方提供一个队列 该队列 默认的是并发处理 线程中的任务可以同时处理多个全局队列 官方提供一个队列 该队列 默认的是并发处理 线程中的任务可以同时处理多个 //dispatch_get_global_queue() dispatch_queue_t HIGH = dispatch_get_global_queue(DISPATCH

script的加载方式与执行

别等时光非礼了梦想. 提交于 2019-12-05 19:57:04
script一般是阻塞式加载的,H5新增了 async 、 defer 和 module 特性,可用于异步加载/延迟执行: async 属性是指当这个 script 可用时,就异步执行它 defer 属性是指当页面被解析完毕后,才能执行 如果以上两个属性都没有,则立刻下载并执行,同时阻止页面的解析,直到执行完毕 module 属性是指关联脚本全部下载后才会执行,且不受defer影响 标准定义详见: https://html.spec.whatwg.org/#the-script-element 关于async和defer aysnc 的 script 不能保证在 jQuery(document).ready 的时候是可用的,而 defer 可以。 这篇博文 给出了如下测试结果: jQuery(document).ready 的执行时序。 Chrome 下是:defer -> jQuery(document).ready -> async -> window.onload。 Firefox 下是:async -> defer -> jQuery(document).ready -> window.onload。 我又把 JavaScript 的下载速度变慢,发现结果仍然没有变化。 所以使用async的时候需要谨慎,全局的属性和方法最好提前定义。 动态加载javascript基本

异步操作async await

霸气de小男生 提交于 2019-12-05 19:36:51
async函数的特点 : 语义化强 里面的await只能在async函数中使用 await后面的语句可以是promise对象、数字、字符串等 async函数返回的是一个Promsie对象 await语句后的Promise对象变成reject状态时,那么整个async函数会中断,后面的程序不会继续执行 例: router.get('/testAsync',async (ctx)=>{ global.console.log('start',new Date().getTime()); const a = await new Promise((resolve,reject)=>{ setTimeout(()=>{ global.console.log('async a',new Date().getTime()); resolve('a') },1000) }); const b = await 123 const c = await new Promise((resolve,reject)=>{ setTimeout(()=>{ global.console.log('async a',new Date().getTime()); resolve('c') },2000) }) ctx.body = { a,b,c }; }) 看看代码的执行过程,它里面遇到了await, await

Python核心技术与实战——十八|Python并发编程之Asyncio

…衆ロ難τιáo~ 提交于 2019-12-05 17:03:39
我们在上一章学习了Python并发编程的一种实现方法——多线程。今天,我们趁热打铁,看看Python并发编程的另一种实现方式——Asyncio。和前面协程的那章不太一样,这节课我们更加注重原理的理解。 通过上节课的学习,我们知道在进行I/O操作的时候,使用多线程与普通的单线程比较,效率有了很大的提高,既然这样,为什么还要Asyncio呢? 虽然多线程有诸多优点并且应用广泛,但是也存在一定的局限性: ※多线程运行过程很容易被打断,因此有可能出现race condition的情况 ※线程的切换存在一定的消耗,线程数量不能无限增加,因此,如果I/O操作非常密集,多线程很有可能满足不了高效率、高质量的需求。 针对这些问题,Asyncio应运而生。 什么是Asyncio? Sync VS Async 我们首先来区分一下Sync(同步)和Async(异步)的概念。 ※所谓Sync,是指操作一个接一个的执行,下一个操作必须等上一个操作完成后才能执行。 ※而Async是指不同操作之间可以相互交替执行,如果某个操作被block,程序并不会等待,而是会找出可执行的操作继续执行。 举个简单的例子,我们要做一个报表并用邮件发送给老板,看看两种方式有什么不同: ※按照Sync的方式,我们相软件里输入各项数据,然后等5分钟生成了报表明细以后,再写邮件发送给老板 ※而按照Async的方式,在输完数据以后

nodejs之async异步编程

自闭症网瘾萝莉.ら 提交于 2019-12-05 15:43:59
原文: http://www.cnblogs.com/hubwiz/p/4208999.html 1.什么是异步编程? 异步编程是指由于异步I/O等因素,无法同步获得执行结果时, 在回调函数中进行下一步操作的代码编写风格,常见的如setTimeout函数、ajax请求等等。 示例: for (var i = 1; i <= 3; i++) { setTimeout(function(){ console.log(i); }, 0); }; 这里大部分人会认为输出123,或者333。其实它会输出 444 这里就是我们要说的异步编程了。 高级函数的定义 这里为什么会说到高级函数,因为高级函数是异步编程的基础。 那什么是高级函数呢? 其实高级函数就是把函数作为参数或者是作为返回值。 示例: function test(v){ return function(){ return v; } } 如上就是把一个函数作为一个返回值。 2.流程控制 函数有: series waterfall parallel parallelLimit series函数 串行执行 它的作用就是按照顺序一次执行。 async.series({ one: function (callback){ callback(null, 1 ); }, two: function (callback){ callback

nodejs 异步编程 async

纵然是瞬间 提交于 2019-12-05 15:42:54
在读源码的过程中,看到有关 async 的代码有很多,本来是问老师,想逃避这里。然而给老师给了一个思路,让理解 async 的 series 函数、waterfall 函数、以及 parallel 函数。于是就有了这篇文章。 async 适用的业务逻辑:连续对数据库操作,前后有依赖 1. 什么是异步编程 异步编程是指由于异步 I/O 等因素,无法同步获得执行结果时,在回调函数中进行下一步操作的代码编写风格,常见的eg: setTimeout 函数、ajax 请求等。 例: for ( var i = 1 ; i <= 3 ; i++) { setTimeout( function () { console.log(i); }, 0 ); }; 对于上述代码,可能大部分人会认为输出 123 或者 333 。但正确结果是 444 以上就是我们要说的异步编程。 在 javaScript 中,异步编程 的基础就是高阶函数。所谓高阶函数,其实就是把函数作为参数或者作为返回值。 例(将函数作为返回值): function test (v) { return function () { return v; } } 2. 流程控制 与流程控制有关的函数有很多,在此,我只简要说说 series、waterfall、parallel。 series —— 串行执行,即按顺序一次执行 async

NodeJS入门 0x4 异步编程(3)作用域,流程控制

随声附和 提交于 2019-12-05 15:42:08
异步开发的难题 在创建异步程序时,你必须密切关注程序的执行流程,并瞪大眼睛盯着程序的状态:事件轮询的条件、程序变量,以及其他随着程序逻辑执行而发生变化的资源。 作用域是如何导致 bug 出现的 function asyncFunction(callback) { setTimeout(callback, 200); } let color = 'blue'; asyncFunction(() => { console.log(`The color is ${color}`);//200ms执行 }); color = 'green'; 用 JavaScript 闭包可以“冻结” color 的值——用匿名函数保留全局变量的值 function asyncFunction(callback) { setTimeout(callback, 200); } let color = 'blue'; (color => { asyncFunction(() => { console.log('The color is', color); }); })(color); color = 'green'; 异步逻辑的顺序化 让一组异步任务顺序执行的概念被 Node 社区称为 流程控制 。这种控制分为两类: 串行 和 并行 。 何时使用串行流程控制 可以使用回调让几个异步任务按顺序执行

iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用

廉价感情. 提交于 2019-12-05 14:32:04
iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用 目录 (?) [+] 介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统。这建立在任务并行执行的线程池模式的基础上的。它首次发布在Mac OS X 10.6 ,iOS 4及以上也可用。 设计: GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。 一个任务可以是一个函数(function)或者是一个 block 。 GCD的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节。 GCD中的FIFO队列称为dispatch queue,它可以保证先进来的任务先得到执行 dispatch queue分为下面三种: Serial 又称为private dispatch queues,同时只执行一个任务。Serial queue通常用于同步访问特定的资源或数据。当你创建多个Serial queue时,虽然它们各自是同步执行的,但Serial queue与Serial queue之间是并发执行的。 Concurrent 又称为global dispatch queue,可以并发地执行多个任务,但是执行完成的顺序是随机的。 Main dispatch

async

天大地大妈咪最大 提交于 2019-12-05 12:22:43
async函数介绍: async函数是ES2017引入的,是Generator函数的语法糖,将Generator函数中的*号替换为async,将yield替换为await。 特点: 1.不需要像Generator调用next方法,遇到await等待,当前的异步操作执行完成再往下执行 2.async的返回值是Promise对象,可以用.then进行下一步操作 3.语义明确,使用简单 基本使用: 例1: 由此可见,遇到await等待,异步操作完成后再执行后面的操作 例2: 在resolve中传参作为await的返回值 例3: 还是之前用Promise和Generator解决过的问题:假设网易云音乐要根据点击的某首歌来获取该歌曲下面的评论,这就要求在请求一首歌曲的成功的回调中,再次请求评论 Promise解决: https://www.cnblogs.com/zxmonster/p/11895734.html Generator解决: https://www.cnblogs.com/zxmonster/p/11923816.html 现在用async函数解决: 总结:对比Promise、Generator和async三种解决异步操作的方法,async语法更加简洁易懂,推荐使用 来源: https://www.cnblogs.com/zxmonster/p/11924915.html