我正在使用一个框架,它在页面加载时自动连接到服务器。我可以通过传递选项参数来禁用它,但让我感到困惑的是this:
您可以通过在事件循环的第一个循环过去之前禁用
io.sails.autoConnect
来阻止此初始套接字自动连接。
我的问题是:
答案 0 :(得分:2)
源文件的文档更加明确;它说“可以通过在事件循环的第一个周期内设置io.socket.options
来禁用或配置它。”
基本上发生的事情是,库中存在setTimeout(fn, 0)
调用,这对于启动并行进程来说是惯用的。但是,在JS标准中明确指出JS是单线程的:换句话说,即使setTimeout
和setInterval
异步,它们实际上并不是并行,因为他们的任何代码都将与任何其他代码同时执行。所以他们等到当前函数结束才执行。这种排队机制称为JavaScript事件循环。
我相信脚本作者要求您做的是修改源以包含相关更改,可能位于文件底部方便。
也可能可能通过在加载给定JS的那个标记下放置一个<script>
标记来实现类似的效果。这还没有被HTML 4明确标准化,但可能在新的HTML 5规范中隐式标准化(这是规范的不同部分之间的复杂交互)。
就HTML5而言,the current specs say看起来像afterscriptexecute
事件和load
事件在加载任何远程脚本后立即发生(或者,如果它是内联的话)脚本,load
事件被安排为任务 - 我不确定何时发生这些事件。因此,您可以在不修改脚本的情况下通过以下方式保证它:
<script>
function do_not_autoload() { /* ... */ }
</script>
<script onload="do_not_autoload()" src="./path/to/sails.io.js"></script>
但我不确定script@onload
的兼容性表格是什么样的。
我让你a jsfiddle可以用来抓取不同浏览器的“指纹”,以了解外面的评估订单。 *
是document.body.onload事件。在我的系统上它产生:
Firefox 32.0.3 : cafdbe*
Chrome 37.0.2062 : cafd*be
IE 11.0.9600 : cafd*be
换句话说,