我遇到了麻烦。我有一个大型视图模型,我的observableArrays拥有大量订阅者。当observable发生变化时,我希望在每个通知之间刷新用户界面,以便UI仍然负责,而淘汰赛仍在计算用户。
有没有办法实现这个目标?
谢谢!
答案 0 :(得分:2)
要使用户界面更具响应性,请使用the "throttle" extender。这样,多个更改将作为单个UI更改重新评估。
对于不冻结的UI,您需要中断JavaScript进程。这样就可以更新UI。这样做的方式,在您的订阅者而不是立即处理延迟它:
model.value.subscribe(function(newValue){
setTimeout(function(){
doWork(newValue);
}, 0);
});
如果你的doWork
进行了许多计算,那将不可避免地冻结UI。为了避免UI冻结,您需要编写代码以便计算以切片完成,以便可以更新UI。 JavaScript调度程序将允许在两个间隔之间进行UI更新。例如,如果您正在处理数组,请处理chunks中的项目。