浏览器线程「建议收藏」

浏览器线程「建议收藏」浏览器线程中至少存在三个线程:JS引擎线程(用于处理JS)GUI渲染线程(用于页面渲染)浏览器事件触发线程(用于控制交互)因为JS可以操作DOM

大家好,欢迎来到IT知识分享网。

浏览器线程中至少存在三个线程:

  • JS引擎线程(用于处理JS)
  • GUI渲染线程(用于页面渲染)
  • 浏览器事件触发线程(用于控制交互)

因为JS可以操作DOM元素,进而会影响到GUI的渲染结果,因此JS引擎线程和GUI渲染线程是互斥的。而JS引擎是基于事件驱动,即单线程运行机制,所以在JS引擎线程处于运行状态时,GUI渲染线程处于冻结状态

案例

需求:在请求数据的过程中,在DOM中添加一个加载样式,请求完成后,关闭此样式

ajax同步请求造成浏览器假死及阻塞GUI渲染

function fn() {
    //js操作dom元素
    $(dom).addClass(classname)
    //ajax同步请求
    $.ajax({
        async: false,
        success: function() {
            $(dom).removeClass(classname)
        }
    })
}
//1.浏览器假死,即数据请求完成后浏览器才正常
//2.页面渲染没效果,数据请求完成后才有效果

IT知识分享网

分析原因:GUI线程和JS线程是互斥的,在执行JS耗时操作时,GUI会被阻塞,当同步请求的时候,其它线程都会处于等待状态,不管DOM操作语句是不是在发出请求的前面,都会被阻塞,不给它执行的时间

解决方案:把同步请求改成异步请求

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/6943.html

(0)
上一篇 2023-01-03 09:54
下一篇 2023-01-03 09:54

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信