哪些代码将在浏览器的主线程上运行?

 糖糖糖开水 发布于 2022-12-22 09:43

Chrome是大三人组(IE,Firefox,Chrome)中最后一个不赞成在"主线程"上运行同步XMLHttpRequest调用的人(就像Firefox所说的那样).某些浏览器还完全删除了.widthCredentials在主线程上设置同步请求选项的功能.

经过远距离搜索后,我找不到足够的信息来精确识别哪些代码将在主线程上运行,哪些代码不会.

很明显,通过脚本标记(内联或使用src)包含的javascript位于主线程上.并且在异步XHR的回调内运行的同步XHR将不会在主线程上运行.

但其他场景呢?鼠标事件,触摸事件,各种文档事件?没有尝试一切怎么说?避免让一切都异步并回调地狱会很好.

请尝试彻底的答案.

编辑: W3C规范警告:当JavaScript全局环境是文档环境时,开发人员不得为async参数传递false,因为它会对最终用户的体验产生不利影响.强烈建议用户代理在开发人员工具中警告这种用法,并尝试在其发生时抛出"InvalidAccessError"异常,以便最终可以从平台中删除该功能.

编辑2: 澄清:

在某些情况下,调用代码必须等待所有竞争同步异步调用完成(使用一些计数器或状态跟踪变量来进行每次调用),或者使用回调链接它们.每种情况都很糟糕.例如,我有一个JSONRPC客户端需要通过查询反射API来动态创建可调用函数.

让所有实现代码(UI或NOT)在另一个库的回调中运行是有利的,特别是如果它必须在多个页面上完成,并且库必须表现为一个简单的定义(隐藏那是在定义时运行代码).这只是复杂性的一个例子,我不是要求它的解决方案,而是对浏览器如何决定哪个是主线程的一般清晰解释.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有