快速响应的用户界面

2019-06-26  本文已影响0人  风雅欢乐

大多数浏览器让一个单线程共用于执行Javascript代码和更新用户界面。这意味着当Javascript执行时,用户界面无法响应。因此浏览器限制了Javascript任务运行时间,确保某些恶意代码不能通过永不停止的密集操作锁住用户的浏览器。此类限制分为两种:

所以Javascript代码一次运行不能太久,否则会触发浏览器的长时间运行脚本限制

单个Javascript操作花费的时间不应该超过100毫秒!

因为研究表明,超过100毫秒,用户就会感觉自己与界面失去联系。

但是难免有一些复杂的Javascript任务不能在100毫秒内完成,这个时候,理想的方法是让出线程控制权。而定时器可以完成这个需求。

用定时器处理数组示例

通过记录代码运行时间,来批处理数据,同时又使得用户察觉不到界面阻塞(使我们脚本运行时间为阈值的一半,即小于50毫秒)

function processArray(items, process, callback) {
    let todo = items.concat();

    setTimeout(() => {
        // 加号表示将date对象转化成数字
        let start = +new Date();

        do {
            process(todo.shift());
        } while (todo.length > 0 && (+new Date() - start < 50));

        if (todo.length > 0) {
            setTimeout(arguments.callee, 25);
        } else {
            callback(items);
        }
    }, 25);
}
总结
上一篇下一篇

猜你喜欢

热点阅读