什么是时间分片(Time Slicing)?

  • 作者:陈大鱼头
  • 首发地址: https://github.com/KRISACHAN/ying-study/issues
  • 说明:鱼头的学习记录

根据W3C性能小组的介绍,超过50ms的任务就是长任务。

图片描述

图片来自使用 RAIL 模型评估性能

根据上图我们可以知道,当延迟超过100ms,用户就会察觉到轻微的延迟。

所以为了避免这种情况,我们可以使用两种方案,一种是Web Worker,另一种是时间切片(Time Slicing)

Web Worker

我们都知道,JS是单线程,所以当我们在运行长任务时,容易造成页面假死的状态,虽然我们可以将任务放在任务队列中,通过异步的方式执行,但这并不能改变JS的本质。

所以为了改变这种现状,whatwg推出了Web Workers

具体的语法不会进行说明,有兴趣的童鞋可以查看MDN Web Worker

我们可以看看使用了Web Worker之后的优化效果:

const testWorker = new Worker('./worker.js')
setTimeout(_ => {
   
  testWorker.postMessage({
   })
  testWorker.onmessage = function (ev) {
   
    console.log(ev.data)
  }
}, 5000)

// worker.js
self.onmessage = function () {
   
  const start = performance.now()
  while (performance.now() - start < 1000) {
   }
  postMessage('done!')
}

图片描述

代码以及截图来自于让你的网页更丝滑

时间切片(Time Slicing)

时间切片是一项使用得比较广的技术方案,它的本质就是将长任务分割为一个个执行时间很短的任务,然后再一个个地执行。

这个概念在我们日常的性能优化上是非常有用的。

例如当我们需要在页面中一次性插入一个长列表时(当然,通常这种情况,我们会使用分页去做)。

如果利用时间分片的概念来实现这个功能,我们可以使用requestAnimationFrame+DocumentFragment

关于这两个API,我同样不会做详细的介绍,有兴趣的可以查看MDN requestAnimationFrame

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
时间切片设置是指操作系统对于多任务处理的一种调度方式。它将CPU的运行时间划分为若干个时间片段,每个时间片段只分配给一个任务执行。当一个任务的时间片用完后,系统会中断该任务的执行,并将CPU分配给下一个任务继续执行。这种方式可以让多个任务之间实现并行执行,使得任务之间的响应更加迅速,提高了系统的并发性和效率。 然而,问题描述中提到的“the time slicing setting is outside”,这句话的意思并不太清晰。如果“outside”指的是时间切片设置超过了某种限定范围,那么这可能会导致一些问题。例如,如果时间片过小,会频繁地进行任务切换,增加了系统的开销;而如果时间片过大,可能会出现某个任务占用CPU时间过长导致其他任务无法及时执行的情况。 另一种可能性是“outside”指的是时间切片设置不符合系统的要求或者不在合理的范围内。操作系统通常会根据不同的应用场景和实际情况来设置时间切片,以达到最优的系统性能。如果设置不当,可能会导致任务之间的响应变慢,系统的并发性能下降。 因此,在进行时间切片设置时,应该根据实际需求和系统的特点,合理地选择时间片的大小。这样可以充分利用CPU资源,保证任务之间的公平性和高效性。 总之,时间切片设置是操作系统中的一种调度方式,用于实现多任务并行执行。合理的时间切片设置可以提高系统的并发性和效率,但如果设置不当则可能导致性能下降。因此,在进行时间切片设置时,需要根据实际需求和系统情况进行合理选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值