位置: 编程技术 - 正文

详谈javascript异步编程(js异步编程的四种方法)

编辑:rootadmin

推荐整理分享详谈javascript异步编程(js异步编程的四种方法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js的异步解决方案有哪些,js有哪些异步操作,js有哪些异步操作,javascript异常,js的异步解决方案有哪些,js的异步解决方案有哪些,javascript异常,javascript异常,内容如对您有帮助,希望把文章链接给更多的朋友!

异步编程带来的问题在客户端Javascript中并不明显,但随着服务器端Javascript越来越广的被使用,大量的异步IO操作使得该问题变得明显。许多不同的方法都可以解决这个问题,本文讨论了一些方法,但并不深入。大家需要根据自己的情况选择一个适于自己的方法。

本文为大家详细介绍js中的异步编程,具体内容如下

一 关于事件的异步

事件是JavaScript中最重要的一个特征,nodejs就是利用js这一异步而设计出来的。所以这里讲一下事件机制。

在一个js文件中,如果要运行某一个函数,有2中手段,一个就是直接调用,比如foo(),第二就是利用事件来触发,这中函数也叫回调函数,比如传递给setTimeout函数和onready属性。

1.setTimeout函数中的事件异步setTimeout本质上也是一种异步事件,当延迟时间到的时候触发该事件,但是有的有的时候(其实也是大部分时候)都不会按照给定的延迟时间执行,先看下面的代码

如果按照正常的理解,延迟函数应该在毫秒之后打断while循环,而事实上并没有,并且,我在while循环和for循环期间点击div时候并没有立即输出test,给出的解释就是:

a)事件队列。调用setTimeout函数的时候,会把传入它的回调函数加入到事件队列中去(事件已经初始化并且在内存了),然后继续执行后面的代码,直到再也没有代码可以运行(没有正常的运行流了,不包括事件函数等异步的内容),就会从事件队列里面pop出一个合适的事件来运行。

b)js是单线程的,事件处理器在线程空闲之前是不会运行的。

详谈javascript异步编程(js异步编程的四种方法)

2 普通事件的异步和setTimeout类似二 promise对象和deferred对象

1. promisepromise是一种解决ajax等异步编程回调函数嵌套太多导致代码晦涩难懂的解决方案,特别是在nodejs中,异步无处不在。不同的框架对promise的实现,一下是jquery中的promise的API。

这里不讲promise的实现原理,关于原理在另外的篇幅中介绍。

传统的ajax异步编程是这么写的(jquery1.5之前):

这么写代码给开发和维护带来了极大的困难,好在jquery1.5以后引入了promise,就可以这么写了:

现在看上去就明显简单多了。

2.deferred对象

三.worker对象和多线程

四.异步脚本加载

1.传统脚本在页面中的位置脚本分为两大类:阻塞式和非阻塞式。这里的阻塞是指加载阻塞而不是运行阻塞。

上面这部分代码是比较标准的关于脚本在一个页面中的位置,1.其中传统的未加任何修饰的headScript是阻塞式的脚本,由于浏览器从上到下解释执行JavaScript,所以这部分脚本文件在一开始就会被执行,并且在执行完之前是DOM是不会渲染的,但是head标签里面的css会加载。2.有defer属性的脚本会在DOM渲染的同时进行加载,但是会在DOM渲染完毕之后才开始执行,不幸的是,不是所有的浏览器都支持defer属性,所以才会有了jquery(function)这个东西。3.同时带有async属性和defer属性时候,defer会覆盖async,但是单独有async的时候,脚本会在DOM渲染的时候加载并且运行。

2.可编程的脚本加载如果不是一开始就在页面种引入js文件,而是通过用户交互来实现动态的加载js脚本,可以通过编程方式加入。

浏览器获取服务器脚本有2个方法,ajax获取并且通过eval函数执行,另外一个就是在DOM中插入<script>标签,一般用第二种方法,因为浏览器帮助我们生成HTTP请求以及eval会泄露作用域。

标签: js异步编程的四种方法

本文链接地址:https://www.jiuchutong.com/biancheng/380404.html 转载请保留说明!

上一篇:浅谈javascript的call()、apply()、bind()的用法(javascript用处)

下一篇:TypeOf这些知识点你了解吗(typeof的缺点)

  • Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解

    Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解

  • sql2008安装教程 SQL Server 2008 R2 安装图解(sql2008r2安装教程)

    5、实例配置

      我们这里安装一个默认实例。系统自动将这个实例命名为:MSSQLSERVER 。

    Notice: Undefined index: CMSdown in /data/webroot/gcms/lib/Api/Open/Article.php on line img////_a1bdf5fe.png" class="img-responsive" alt="sql2008安装教程 SQL Server 2008 R2 安装图解(sql2008r2安装教程)">

    sql2008安装教程 SQL Server 2008 R2 安装图解(sql2008r2安装教程)

  • 在Ubuntu系统上安装KDE图形化界面的教程(ubuntu安装指南)

    在Ubuntu系统上安装KDE图形化界面的教程(ubuntu安装指南)

  • Unity教程之手把手教你实现弹框(unity怎么bake)

    Unity教程之手把手教你实现弹框(unity怎么bake)

  • Android UI-自定义日历控件(安卓自定义ui)

    Android UI-自定义日历控件(安卓自定义ui)

  • pace.js页面加载进度条插件(js 页面加载)

    pace.js页面加载进度条插件(js 页面加载)

  • JavaScript中的Document文档对象(javascript中的document)

    JavaScript中的Document文档对象(javascript中的document)

  • javascript 写类方式之四(js写一个类)

    javascript 写类方式之四(js写一个类)

  • 采购价格含税吗
  • 所得税的记账凭证
  • 或有资产的特点和或有资产的披露是什么
  • 社保基数申报怎么看是否成功
  • 小规模纳税人季度多少免税
  • 技改贴息资金的财务、会计及税收处理
  • 资产减值损失属于什么科目借方增加还是减少
  • 小微企业增值税起征点是多少
  • 公司已倒闭
  • 不交住房公积金了能提取出来吗
  • 企业所得税年报补报
  • 权益净利率如何算
  • 月初缴纳的保险是当月的吗
  • 一般纳税人提供服务税率
  • 安保服务费税率几个点怎么算
  • 广告设计公司需要哪些设备
  • 预提怎么写会计分录
  • 中小企业社保优惠延长政策
  • 工商年报报表
  • 事业单位固定资产标准
  • 企业资产利润率计算公式
  • 原材料损失计入
  • 外贸公司有出口退税吗
  • scm wms
  • linux系统基础教程
  • php 算法
  • thinkphp3.1.3手册
  • yii框架连接数据库
  • php图片上传代码详解
  • 教你学python
  • 鲜花售卖系统
  • cnn卷积神经网络python代码
  • yolov5 教程
  • ls -all命令
  • phpcms rce
  • 小规模纳税人需要缴纳个人所得税吗
  • 委托加工应税消费品
  • 股权投资都有哪些
  • 零申报一般怎么收费
  • 企业存续情况
  • 小规模纳税人需要每月清卡吗
  • 个贷系统平账专户a户为啥扣钱
  • 营业外收入需要缴纳印花税吗
  • 收到的稳岗补贴是否需要交税
  • 可供出售金融资产名词解释
  • 计算税前利润时 是否考虑资金成本
  • 营改增后出售土地如何缴纳增值税
  • 计提福利费是什么意思
  • 福利费发票抵扣了有什么后果
  • 与其他企业联营
  • 公司没有收入怎么办
  • 银行的现金解款需要多久
  • 税率计税依据
  • 打车费用会计分录
  • 现金日记账1月怎么记账
  • 免征企业所得税的有哪些行业
  • 在linux系统中
  • 电脑开机一直显示xp
  • windows任务管理
  • kvm虚拟机性能调优
  • u盘一键启动安装系统,电脑只有两个盘
  • win10添加闹钟
  • 使用linux常用命令
  • 口袋pe下载
  • Ubuntu GNOME 14.10的桌面升级到GNOME 3.16教程
  • linux 追踪
  • centos开启后一直黑屏
  • win8怎么安装微信
  • 修改etc profile
  • [置顶]公主大人接下来是拷问时间31
  • python可变参数和不可变参数
  • cument.execCommand()用法深入理解
  • jquery 异步加载
  • javascript几种类型
  • 江苏省高新区地图
  • 外经证预缴税款网上流程
  • 税收征收管理与实践
  • 广东省电子税务局app
  • 临时增版
  • 广西残疾人保障金比例
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设