在计算量大的呼叫期间避免UI冻结

时间:2018-04-19 13:41:08

标签: javascript

我有以下事件监听器

button.addEventListener('click', function(){
 this.classList.add('disabled');
 aFunctionThatTakesLongToExecute();
});

问题是,与 aFunctionThatTakesLongToExecute 的执行完成后,与新添加的按钮类相关联的屏幕上的重绘会发生,这会产生口吃的用户体验。

即使javascript函数正在执行,有没有办法强制重绘?

1 个答案:

答案 0 :(得分:1)

我不太了解您所描述的行为,但您可以像这样包装您的函数调用:

setTimeout(aFunctionThatTakesLongToExecute);

基本上,它会异步和立即调用您的方法,因为setTimeout第二个参数未设置(通常是执行前的时间,以毫秒为单位)。

请注意,如果aFunctionThatTakesLongToExecute不接受任何参数,则此语法有效。否则,你必须将函数调用包装在另一个(匿名)函数中,并将这个新函数赋予setTimeout指令,如下所示:

setTimeout(() => {
    aFunctionThatTakesLongToExecute(yourParameter);
});

这是指向文档的链接:https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout