关于js 中 异步调用的猜想
来源:互联网 发布:h5页面如何优化 编辑:程序博客网 时间:2024/04/28 17:05
js 进行网络异步调用大家都知道,核心是XMLHTTPRequest 对象.通过此对象可以跟服务器交互.但是异步在js 里面是如何实现的呢?
异步调用:当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
同步调用:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.
举个栗子:
同步调用:下班回家,要先用钥匙开门,然后才能进入房间;饭做好了,才能吃饭………;
异步调用:按下电饭煲的开始煮饭按钮,然后去看电视,同时等电饭煲哒的一声,就知道饭已经做好了.
默认情况下,js的代码执行都是顺序同步执行的.而且js是单线程的,这意味着你不能通过开一个新的线程来执行一个任务,然后又执行其它的任务.
不过js 可以用线程队列的方式来模拟多线程.比如我要执行一个费时的工作,但这个费时的工作,并不影响我做其它的事情,这个时候完全没有必要一直等它执行完成了,再去
做其它事情.
而是,把这个事情放到线程的队列里面,然后我再接着做别的事情.(注意这两个事情是没有任何关联的)
那么如何把费时的事情放到线程队列中,等待被处理呢?
下面是我个人的猜想:
<!doctype html><html> <head> <title>async</title> <style> #message{ color:red; width:500px; height:200px; border:2px green solid; } </style> </head> <body> <div id = 'message'>init</div> </body> <script> function hardOperate(count,callback){ setTimeout(function(){ var i = 0; while(i < count) { console.log('do :' + i ) i ++; } callback(i); }) document.getElementById('message').innerText = 'Loading........' } function finished(value){ document.getElementById('message').innerText = value+''; } hardOperate(100000,finished); </script></html>
在100000次循环中,浏览器页面并没有发生卡白.除了最开始加载页面代码的时候有一点短暂的卡,这个跟js代码执行没有关系.
参照:https://github.com/oadaM92/oadaM92-blog/tree/master/blogs/2016-03-21-setTimout(0)
发现自己的看法太片面,其实还有事件驱动模式,发布订阅模式和promise
0 0
- 关于js 中 异步调用的猜想
- 关于js异步调用webservice
- js与ajax中异步调用的简单理解
- 关于js中函数的动态调用
- JS中关于函数调用的问题
- 关于js的异步调用思想理解——从C到js
- 关于JS的异步加载
- Nightwatch.js 异步中调用等待执行
- Node.js中,q在链式调用和异步调用中起到的作用
- 关于宇宙的猜想
- 关于计算机世界的猜想
- 异步调用js的几种方法
- js异步调用常犯的错误
- 关于webservice的异步调用简单实例
- 关于webservice的异步调用简单实例
- 关于webservice的异步调用简单实例
- 细节:关于异步调用的解决方案
- 关于C#异步调用的2篇文章
- Opencv显示超大图像
- java类规范
- .NET DLL 保护措施详解(二)关于性能的测试
- bzoj2342(双倍回文)
- 0% [Connecting to archive.ubuntu.com (2001:67c:1360:8001::21)] [Connecting to s
- 关于js 中 异步调用的猜想
- linux yum命令
- OJ题:句子逆转
- PHP 初学之路【一】
- Atom汉化成中文
- poj2442(堆)
- div效果很好的遮盖层效果
- Java内存溢出详解
- 后台守护进程的创建