浏览器如何执行javascript和渲染异步
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了浏览器如何执行javascript和渲染异步,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2116字,纯文字阅读大概需要4分钟。
内容图文
![浏览器如何执行javascript和渲染异步](/upload/InfoBanner/zyjiaocheng/733/8c9297e801c64ba6a2eb1345c3f16199.jpg)
这是jsfiddle上的代码
<script>
function updateSync1() {
for (var i = 0; i < 1000; i++) {
document.getElementById('output').innerHTML = i;
}
}
function updateSync2() {
for (var i = 0; i < 1000; i++) {
setTimeout(document.getElementById('output').innerHTML = i, 0);
}
}
function updateAsync() {
var i = 0;
function updateLater() {
document.getElementById('output').innerHTML = (i++);
if (i < 1000) {
setTimeout(updateLater, 0);
}
}
updateLater();
}
</script>
<div class="row btn_area">
<button class="btn btn-info" onclick="updateSync1()">Run Sync 1</button>
<button class="btn btn-info" onclick="updateSync2()">Run Sync 2</button>
<button class="btn btn-info" onclick="updateAsync()">Run Async</button>
<span class="label label-info pull-right" style="display:block;" id="output"></span>
</div>
http://jsfiddle.net/himaneasy/y1534ths/
当我点击“运行同步1”时,代码将直接运行到999.
当我单击“运行同步2”时,代码将直接运行到999.
当我单击“运行异步”时,页面将逐个呈现.
任何人都可以帮助解释Run Sync1&运行Sync2?
为什么运行同步2中的setTimeout不能逐个渲染?
谢谢!
解决方法:
Javascript执行是single-threaded.它使用任务队列和堆栈来执行东西.
这段代码:
for (var i=0;i<length;i++) {
setTimeout(drawChartFunc,0);
}
将[length] setTimeouts调用添加到任务队列并随后执行所有这些调用(0 ms超时).只有最后一个操作才会更新屏幕,因为所有超时任务都首先出现在堆栈上(循环之后,任务队列包含[length] setTimeout调用).每个超时都执行drawChartFunc.现在drawChartFunc确实在任务队列上放置了一个屏幕更新功能,但剩下的超时时间先到,所以首先执行下一个超时 – 屏幕更新功能只能在[length] setTimeout调用完成后执行(任务执行)队列/栈).这也是随后完成的,但速度非常快.如果您的眼睛经过训练可以看到纳秒转换,您可能已经发现了输出中的后续数字;)
现在
function updateLater() {
drawChartFunc();
i++;
if (i < length) {
setTimeout(updateLater, 0);
}
}
首先运行drawChartFunc将屏幕更新放在任务队列上,然后将增量i放在任务队列上,并且 – 如果适用 – 之后将新的setTimeout添加到任务队列.换句话说,drawChartFunc被放在堆栈上,它将屏幕更新放在堆栈上,两者都被执行,随后超时被放在堆栈上,将drawChartFunc放在堆栈上……等等.
确认javascript任务队列/堆栈:this video对我来说真的很有用.
这是你的jsFiddle,重写了一下.它显示了两种方法的排队过程.
内容总结
以上是互联网集市为您收集整理的浏览器如何执行javascript和渲染异步全部内容,希望文章能够帮你解决浏览器如何执行javascript和渲染异步所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。