To make UI more responsive use the "throttle" extender. That way multiple changes are re-evaluated as a single UI change.
For UI not to freeze, you would need to interrupt JavaScript process. So that UI can be updated. The way to do that, in your subscribers instead of doing processing immediately delay it:
model.value.subscribe(function(newValue){ setTimeout(function(){ doWork(newValue); }, 0); });
If your doWork does many computations that will inevitably freeze UI. To avoid UI freezing you need write code so that computations are done in slices, so that UI can be updated. JavaScript scheduler will allow for UI update in between intervals. For example, if you are processing array, process items in chunks.