大多数浏览器让一个单线程(浏览器UI线程)共用于执行JavaScript和更新用户界面。每个时刻只能执行其中一种操作,这意味着当JavaScript代码正在执行时用户界面无法响应输入,反之亦然。当JavaScript代码执行时,用户界面处于“锁定”状态。
如果界面在100毫秒内响应用户输入,用户会任务自己在“直接操纵界面中的对象”。超过100毫秒意味着用户会感到自己与界面失去联系。由于JavaScript运行时无法更新UI,所以如果JavaScript运行时间超过100毫秒,用户就会感觉失去了对界面的控制。
更复杂的情况是有些浏览器在JavaScript运行时不会把UI、更新任务加入队列。在一个脚本运行期间点击一个按钮,将无法看到它被按下的样式,尽管它的onclick事件处理器会被执行。
让出UI线程的控制权,意味着停止执行JavaScript,使UI线程有机会更新,然后再继续执行JavaScript。
定时器与UI线程的交互方式有助于把长时间运行脚本拆分为较短的片段。
无论发生何种情况,创建一个定时器会造成UI线程暂停,如同它从一个任务切换到下一个任务。
大多数浏览器让一个单线程(浏览器UI线程)共用于执行JavaScript和更新用户界面。每个时刻只能执行其中一种操作,这意味着当JavaScript代码正在执行时用户界面无法响应输入,反之亦然。当JavaScript代码执行时,用户界面处于“锁定”状态。
如果界面在100毫秒内响应用户输入,用户会任务自己在“直接操纵界面中的对象”。超过100毫秒意味着用户会感到自己与界面失去联系。由于JavaScript运行时无法更新UI,所以如果JavaScript运行时间超过100毫秒,用户就会感觉失去了对界面的控制。
更复杂的情况是有些浏览器在JavaScript运行时不会把UI、更新任务加入队列。在一个脚本运行期间点击一个按钮,将无法看到它被按下的样式,尽管它的onclick事件处理器会被执行。
让出UI线程的控制权,意味着停止执行JavaScript,使UI线程有机会更新,然后再继续执行JavaScript。
定时器与UI线程的交互方式有助于把长时间运行脚本拆分为较短的片段。
无论发生何种情况,创建一个定时器会造成UI线程暂停,如同它从一个任务切换到下一个任务。