位置: 编程技术 - 正文

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

发布时间:2024-02-27

推荐整理分享详谈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的缺点)

  • 所得税费用调增分录
  • 要交多少增值税
  • 啥叫总分类账
  • 专用发票不抵扣怎么做账
  • 上年度职工月平均工资是税前还是税后
  • 电子商业承兑对方接收了还可以作废吗
  • 小微企业银行贷款印花税
  • 工程成本哪些可以抵扣
  • 即征即退增值税需要缴纳所得税吗
  • 发票联丢失用抵扣联做账可以吗
  • 红字发票开具只能针对一份发票 不可以只冲红其中一部分吗?
  • 办公室设计费取费标准一览表
  • 税收返还会计处理
  • 借款本金和借款余额
  • 水费能不能开专票
  • 外汇汇兑损益怎么做账
  • 资产负债表在建工程怎么填列
  • 去年多计提的个税如何处理
  • 普通发票用记账吗
  • 金蝶系统怎么修改库存数量
  • win11开机后无法操作
  • 鸿蒙系统怎么设置桌面小组件
  • win10系统电脑怎么连接wifi
  • 怎么修改?
  • 房地产企业的沙盘模型制作费会计处理
  • 哪些税改将影响家庭个人财富
  • 小程序报错怎么解决
  • 小程序开发必备的东西有哪些
  • 简易办法征收增值税政策的通知
  • 维保服务的税率是多少
  • 什么是长期应付票据
  • html代码form
  • php如何入门
  • 建筑公司预收账款财税怎么处理
  • 短期投资的入账成本
  • 单位购买预付卡可以用现金吗
  • 企业固定资产贷款二押的风险
  • 公司财务报表中不设其他综合收益项目可以吗
  • 捐赠做公益
  • 以前年度损益调整结转到本年利润吗
  • 发票冲红重开摘要如何写合适?
  • 企业做税务局迁移应该做哪些事情
  • 为什么白条不能打白条
  • 银行利息收入怎么计算
  • 采购方退货的会计分录
  • 小微企业不用缴纳社保可以吗现在
  • 未取得增值税发票措施有哪些
  • 《关于工资总额组成的规定》第四条
  • 10万以下销售额怎么算
  • 增值税版本升级
  • 建筑业统一发票可以抵扣吗
  • 公司市场部职能
  • 征收率和税率的区别举例
  • 复合索引顺序
  • windows xp操作
  • 怎么防止win10
  • centosuuid
  • win7 系统设置
  • win7系统调节亮度快捷键
  • mac版cad2022使用教程
  • 怎么用苹果电脑打印照片
  • win双系统怎么切换
  • 如何在linux中安装软件
  • Extjs grid panel自带滚动条失效的解决方法
  • 在vs中搭建opengl环境
  • android 自定义drawable
  • android su
  • Androidannotation使用之@Rest获取资源及用户登录验证(一)
  • python重复操作符
  • angular script
  • 教学实例分析怎么写
  • adb push、adb install 和强制安装
  • 教你学python
  • javascript教程chm
  • 纸质发票怎么查电子发票
  • 新办纳税人是什么多久之内
  • 贵州国家电子税务局登录入口
  • 龙华医院怎么网上预约
  • 中国十大经济排名
  • 86年的2020年是多少岁
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号