Skip to content

浏览器性能相关

同步任务转异步任务,交给浏览器去调度

我们屏幕的刷新频率大多数是 60 Hz,也就是浏览器每秒钟大概需要渲染 60 次,但如果我们的代码块执行的时间过长,就会导致浏览器的渲染被阻塞,导致丢帧、卡顿; 我们可以通过此方法把大任务拆分成小任务,并放入浏览器的延时队列里等待执行,这样浏览器就会根据自身情况,选择空闲时间来执行异步任务,不会阻塞渲染,导致卡顿,丢帧等问题。

javascript
import { Scheduling } from 'lib-agile'

const taskList = [] //任务列表
const num = 5 //每次处理5个,每5个任务合成一个异步任务放入异步队列
const scheduling = new Scheduling(taskList, num, (o) => {
  // 处理任务
  console.log(o)
})

// 执行完成后的回调
scheduling.done(() => {
  console.log('执行完成')
})

// 如果没执行完成就要离开了,可以清除任务
scheduling.clear()

执行耗时任务

执行耗时任务,最大限度的不阻塞浏览器渲染

javascript
/**
 * 执行一个耗时任务,尽量让浏览器渲染不产生卡顿
 * @param task 需要执行的任务函数
 * @param timeRemaining 距离下次浏览器渲染还剩多少毫秒之前执行, 这个数字在0 - 10之内,该参数不兼容Safari
 * @returns Promise
 */

import { runTask } from 'lib-agile'

for (let i = 0; i <= 10000; i++) {
  runTask(() => {
    console.log(i)
  }).then(() => {
    if (i === 100000) {
      console.log('done')
    }
  })
}