zoukankan      html  css  js  c++  java
  • 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回调放到异步队列中,随后在主线程中被执行。

  • 相关阅读:
    浅谈SQL Server 对于内存的管理
    【JSON解析】JSON解析
    SQLSERVER吞噬内存解决记录
    数据schemaAvro简介
    Windows命令查看文件MD5
    均分纸牌(贪心)
    an easy problem(贪心)
    导弹拦截问题(贪心)
    活动选择(贪心)
    整数区间(贪心)
  • 原文地址:https://www.cnblogs.com/kidsitcn/p/10620627.html
Copyright © 2011-2022 走看看