【发布时间】:2019-05-22 21:32:16
【问题描述】:
以下 sn-p 说明了我的问题。我有一些代码调用jQuery.trigger 处理customeventstart 事件,然后进行一些密集处理,然后再次调用jQuery.trigger 处理customeventstop 事件。
我希望customeventstart 的事件处理程序立即执行。但是,在控制台显示 customeventstart 处理程序的结果之前存在明显的延迟。似乎直到触发代码完成执行后才会调用事件处理程序。
注意:您可以根据机器的处理能力调整代码 sn-p 中循环的迭代次数,以延长/缩短延迟。
btn = $('#btn');
btn.on('click', function() {
btn.trigger('customeventstart');
// intensive/time-consuming processing
for (var i = 0; i < 100000000; ++i) {
'string' + 'concatenation';
}
console.log('intensive processing done');
btn.trigger('customeventstop');
});
btn.on('customeventstart', function() {
console.log('starting');
});
btn.on('customeventstop', function() {
console.log('stopping');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btn">This may take a while</button>
我计划使用异步 Web Workers 解决方案,但我想更好地了解发生了什么。
为什么jQuery.triggered 事件的处理程序要等待或似乎要等到触发代码完成?
【问题讨论】:
-
所有 jQuery 事件,据我所知(可能有例外,因为我不是上帝),同步执行。这可能是给您带来明显“延迟”的原因。
-
“但是,在控制台显示 customeventstart 处理程序的结果之前存在明显的延迟。” 在什么浏览器上?对于 Chrome 上的我来说,延迟在 0 到 8 毫秒的范围内。这是我用来记录那些时间的片段:pastie.org/9975343 时间似乎也与我所看到的相符,但人类最多只能准确到大约 50-100 毫秒,而我这个年龄 [48] 的人类可能接近尾声那种规模。 :-)
-
@T.J.Crowder 感谢您的 sn-p。对我来说,它在 Firefox 中接近 800 毫秒。但这应该非常依赖于系统,对吧?我现在正在运行其他选项卡/流媒体视频/软件。我正在开发一个需要大量扩展的系统(不确定多少),因此我担心保持 UI 响应。
标签: javascript jquery events jquery-events