Javascript 避免在计算量大的调用期间UI冻结

Javascript 避免在计算量大的调用期间UI冻结,javascript,Javascript,我有以下事件侦听器 button.addEventListener('click', function(){ this.classList.add('disabled'); aFunctionThatTakesLongToExecute(); }); 问题在于,与按钮新添加的类相关联的屏幕上的重新绘制是在完成执行需要执行的功能时进行的,该功能创建了stutter-y用户体验 有没有一种方法可以在javascript函数执行时强制重新绘制?我不太理解您所描述的行为,但您可以这样包装函数调用:

我有以下事件侦听器

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

问题在于,与按钮新添加的类相关联的屏幕上的重新绘制是在完成执行需要执行的功能时进行的,该功能创建了stutter-y用户体验


有没有一种方法可以在javascript函数执行时强制重新绘制?

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

setTimeout(aFunctionThatTakesLongToExecute);
setTimeout(() => {
    aFunctionThatTakesLongToExecute(yourParameter);
});
基本上,它会立即异步调用您的方法,因为没有设置第二个参数(通常是执行前的时间,以毫秒为单位)


请记住,如果采用slongtoexecute的函数
不采用任何参数,则此语法有效。否则,必须将函数调用包装到另一个(匿名)函数中,并将该新函数赋给setTimeout指令,如下所示:

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

这里有一个指向文档的链接:

将函数移动到web worker。我不太理解你所描述的行为,但是你可以这样包装你的函数调用:
setTimeout(一个需要slongtoexecute的函数)。基本上,它会立即异步调用您的方法。(在回答中写了更多细节)一个需要努力才能实现的函数,它不需要任何参数?不,它不需要任何参数。谢谢,我只是希望有其他东西。没有理由使用其他东西。您有一个时间成本很高的函数。只要让它“在后台”运行,这就是异步函数调用的要点。