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).第一个周期过去会影响这个吗?编辑:是的,确实如此.
>如何确保我的代码在第一个周期过去之前运行?
>这种自动连接的实现是否被视为良好做法?
解决方法
基本上发生的事情是库中存在一个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
换一种说法,