关于浏览器主线程执行顺序
前阵子在整理异步知识时发现 脚本放在body标签底部时,在script标签中写了一个非常大量的循环。本以为结果是:"页面渲染,页面假死无响应",实际结果却是:"页面无渲染,页面直接假死"。
猜测
页面顺序解析文档节点后保存于内存中,并未执行渲染,等待主线程执行完同步js代码后进行渲染,在执行异步栈js。(问题:虽然js可以通过获取dom节点内存地址来进行操作说的过去,但是在文档解析后进行dom操作会reflow这一说法就没法解释)
页面解析文档节点后立即执行(高程三中有讲),那意味着在解析到js脚本并立即执行时页面应该已经渲染出图像,但是没有渲染。
结果
因为js没法使用sleep等强类型语言的线程停止,导致无法测试出真实的线程停止效果,最后使用浏览器的debug工具实现线程暂停。
页面确实如高程三中所讲:顺序解析文档节点并立即执行(渲染)然后执行脚本异步代码,至于为什么上面说执行脚本时页面没渲染是因为浏览器有一个假死机制,暂时不清楚是什么原理,它会判断页面是否能够执行,接而选择是否要渲染该页面