处理浏览器端长时间执行JavaScript脚本的两种优化方式:定时器和worker

本文介绍了两种处理浏览器中长时间任务的技术:定时器方式和worker线程。定时器方式通过将任务分割并间隔执行来避免UI卡顿;worker线程则在独立于UI的新线程中运行长时间任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种:定时器方式,把长时间的任务进行分割成一个数组,间隔一定的时间执行。
function timeProcessArray(items, process, callBack) {
  let todo = items.concat()
  setTimeout(function () {
    let time = +new Date()
    do {
      process(todo.shift())
    } while (todo.length && (+new Date() - time < 50))// 大于100毫秒时间就偏长了(UI线程会卡住,用户会感觉到卡顿),最好小于这个值
    if (todo.length) {
      setTimeout(arguments.callee, 25) // 考虑定时器的分辨率,window系统在定时器小于15秒IE会锁定,卡住UI进程
    } else {
      callBack(items)
    }
  }, 25)
}
第二种:worker,浏览器开启的一个新的线程,不涉及UI线程无关
// Worker运行环境有以下几部分组成:
   // 1. 一个navigator对象,只包含四个属性:appName,appVersion,userAgent和platform
   // 2. 一个location对象,(与window.location一样,不过属性只读)
  //  3. self对象,指向全局的worker对象
  //  4. 一个importScripts()方法,用来加载外部文件到worder
  //  5. 所以ECMAScript对象,如 object,array
  //  6. XMLHttpRequest构造器
  //  7. 定时器
  //  8. 一个close方法,它能立即停止worker运行
// Web Workers适用于那些纯数据处理,或者与UI无关的长时间运行脚本
let worker = new Worker('./p3.js')
worker.onmessage = function (event) {
  console.log(event.data)
}
worker.postMessage('zsn')
//p3
importScripts('p1.js', 'p2.js')
//该方法接受一个或多个JavaScript文件URL路径。importScripts的调用过程是阻塞式的,只有文件加载执行后,脚本才会继续运行
 //由于worker在UI线程之外运行,所以这种阻塞不会影响UI响应
self.onmessage = function (event) {
  self.postMessage('hello ' + event.data)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值