微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 浏览器的事件循环何时开始?

我正在使用一个框架,它在页面加载时自动连接到服务器.我可以通过传递选项参数来禁用它,但让我困惑的行是 this

You can prevent this initial socket from connecting automatically by disabling io.sails.autoConnect before the first cycle of the event loop elapses.

我的问题是:

>事件循环的第一个循环何时过去?
>在所有现代(IE9)浏览器中,此行为是否相同?
>我有一堆脚本的lib和我的条目文件之间加载(在<身体GT).第一个周期过去会影响这个吗?编辑:是的,确实如此.
>如何确保我的代码在第一个周期过去之前运行?
>这种自动连接的实现是否被视为良好做法?

解决方法

文件的文档更加明确;它说“可以通过在事件循环的第一个循环中设置io.socket.options来禁用或配置它.”

基本上发生的事情是库中存在一个setTimeout(fn,0)调用,这是启动并行进程的惯用语法.但是,在JS标准中明确指出JS是单线程的:换句话说,即使setTimeout和setInterval是异步的,它们实际上并不是并行的,因为它们的任何代码都将与任何其他代码同时执行.所以他们等到当前函数结束才执行.这种排队机制称为JavaScript事件循环.

我相信脚本作者要求您做的是修改代码以包含相关更改,可能在文件底部以方便您使用.

通过放置< script>也可能实现类似的效果.标记在加载给定JS的那个下面.这还没有被HTML 4明确标准化,但可能在新的HTML 5规范中隐式标准化(这是规范的不同部分之间的复杂交互).

就HTML5而言,看起来像the current specs say,有一个afterscriptexecute事件和一个加载事件,它在加载任何远程脚本后立即发生(或者,如果它是内联脚本,则load事件被安排为任务 – 我不是确定何时发生).所以你可以保证它而不修改脚本,而是做:

<script>
function do_not_autoload() { /* ... */ }
</script>
<script onload="do_not_autoload()" src="./path/to/sails.io.js"></script>

但我不确定脚本@ onload的兼容性表是什么样的.

我为你制作了a jsfiddle,它可以用来为不同的浏览器抓取一个“指纹”,以了解那里的评估订单. *是document.body.onload事件.在我的系统上它产生:

Firefox 32.0.3 : cafdbe*
Chrome 37.0.2062 : cafd*be
IE 11.0.9600 : cafd*be

换一种说法,

原文地址:https://www.jb51.cc/js/157279.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐