javascript中的异步编程
正常情况下js都是顺序执行的,但是也有很多场景下实际上是异步操作:
1、定时器都是异步操作
2、事件绑定都是异步操作
3、AJAX中一般我们都采取异步操作(也可以同步)
4、回调函数可以理解为异步(不是严谨的异步操作) 剩下的都是同步处理
异步操作产生的本质原因:js单线程event-loop运行模型
由于js会操作dom,而dom要展示出来就必须经过渲染,渲染的dom必须具有完整一致性,我们不能一边渲染dom,同时js操作修改dom.
为了简单地解决并行dom修改和dom渲染可能带来的dom不一致的问题,提出了一个解决方案: 渲染+js顺序运行于一个单线程中,js运行时渲染是停止的,渲染在执行时js是停止运行的。
在这种单线程模式下,如果js执行代码时间过长,比如请求网络下载大文件,这时渲染就将停止,整个页面处于无法接收任何ui输入的状态,也就是卡顿状态,这将严重影响用户的体验。
正因为这样,js引入了异步操作的解决方案:不同步执行所有代码,而是仅同步执行部分代码,异步的js代码则在合适的时机放入异步loop队列中,以便放入js主线程中运行。
比如:
$.ajax("http://www.baidu.com",{success(data){console.log(data)}})
在执行ajax请求后js引擎就继续往下走,等待网络请求顺利完成后,则将success回调放到异步队列中,随后在主线程中被执行。
转载于:https://www.cnblogs.com/kidsitcn/p/10620627.html
javascript中的异步编程相关推荐
- JavaScript中的异步梳理(0)
JavaScript中有大量异步操作,首先可以看看JS中什么东西会产生异步(这里先只考虑浏览器里的情况): Ajax(XMLHttpRequest) Image Tag,Script Tag,ifra ...
- JavaScript 中的函数式编程实践
为什么80%的码农都做不了架构师?>>> 基础知识 函数式编程简介 说到函数式编程,人们的第一印象往往是其学院派,晦涩难懂,大概只有那些蓬头散发,不修边幅,甚至有些神经质的大学 ...
- 一文说通C#中的异步编程补遗
前文写了关于C#中的异步编程.后台有无数人在讨论,很多人把异步和多线程混了. 文章在这儿:一文说通C#中的异步编程 所以,本文从体系的角度,再写一下这个异步编程. 一.C#中的异步编程演变 1. ...
- 一文说通C#中的异步编程
天天写,不一定就明白. 又及,前两天看了一个关于同步方法中调用异步方法的文章,里面有些概念不太正确,所以整理了这个文章. 一.同步和异步. 先说同步. 同步概念大家都很熟悉.在异步概念出来之前,我 ...
- 【转】.Net中的异步编程总结
一直以来很想梳理下我在开发过程中使用异步编程的心得和体会,但是由于我是APM异步编程模式的死忠,当TAP模式和TPL模式出现的时候我并未真正的去接纳这两种模式,所以导致我一直没有花太多心思去整理这两部 ...
- 了解和使用DotNetCore和Blazor中的异步编程
目录 介绍 您对异步编程了解什么? 那么,什么是异步编程? 我们什么时候应该使用它? 任务.线程.计划.上下文 到底是怎么回事? Asnyc编码模式 命名约定 异步任务模式 任务模式 事件模式 阻塞与 ...
- .NET中的异步编程——常见的错误和最佳实践
目录 背景 async void 没有线程 Foreach和属性 始终异步 在这篇文章中,我们将通过使用异步编程的一些最常见的错误来给你们一些参考. 背景 在之前的文章中,我们开始分析.NET世界中的 ...
- JavaScript中的异步、同步
要理解JS中的异步.同步,需要先了解JS代码的执行过程和Event Loop. JavaScript代码的执行过程 程序需要执行的操作都会被放入Call Stack(A LIFO (Last In, ...
- JavaScript中的元编程
紧接上回,伴随着Reflect,Proxy降世,为js带来了更便捷的元编程! 什么是元编程?这词第一次听,有点懵,好像有点高级,这不得学一下装-进自己的知识库 概念 元编程是一种编程技术,编写出来的计 ...
最新文章
- 以下不是python文件读写方法的是-使用Python进行二进制文件读写的简单方法(推荐)...
- R语言实战应用精讲50篇(十三)-如何使用JAVA调用R语言,两种语言的完美结合
- java学习(144):file常用方法1
- np.cross函数详解
- mysql.5.7 linux_Mysql5.7 Linux安装教程
- 即将绝版!小米最经典旗舰降价甩,以后不会再有了
- python中字典的键是唯一的吗_Python怎么通过字典的键和值做一个登录程序?
- sklearn的快速使用
- 学习OO,实现的小跟堆代码
- 计算机应用基础考试制作表格,计算机应用基础考试---Excel电子表格公式与函数...
- h5大前端常用网站以及npm模块整理
- Sepic电路的参数计算及仿真
- 泰坦尼克号-数据加载及探索性数据分析
- 抖音算法机制,抖音算法规则,抖音算法逻辑
- 唯冠和苹果的官司打得热闹
- 希捷1.5T硬盘2天变废铁!12代依然问题重重!购买慎重
- Matplotlib画蜡烛图
- 现在干什么行业最赚钱,什么行业前景好最赚钱?
- 电子商务html语言及特点,南开18秋学期(1703)《电子商务网页制作》在线作业答案...
- 计算机考研英语复试自我介绍范文,2017考研英语复试自我介绍6篇
热门文章
- vue.js中使用radio和checkbox
- ORACLE expdp/impdp详解
- Python科学计算(一)环境简介——Anaconda Python
- [安卓] 7、页面跳转和Intent简单用法
- 我无法不是我自己...
- git 拉取远程分之到本地
- 注解@NotNull/@NotEmpty/@NotBlank
- Object-c学习之路三(@class与#import的区别)
- 统计学习方法 第一章 学习心得
- AS3 in FlashDevelop