请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

expirationTime的问题

老师我遇到了一个很迷惑的问题。
不知道您有没有关注react最新的源码,react最新的源码里关于expirationTime的计算方式改变了。最新的expirationTime是越大,优先级就越高。

const MAX_SIGNED_31_BIT_INT = 1073741823;

export const Sync = MAX_SIGNED_31_BIT_INT;

从它定义Sync的值就可以看出,同步任务的expirationTime是最大的,优先级就是最高的。
时间越早,expirationTime就越大,优先级就越高。

但是在调度的时候有个task的概念。

function unstable_scheduleCallback(priorityLevel, callback, options) {
// 删了无关部分
  var currentTime = getCurrentTime();

  var startTime;
  var timeout;
  if (typeof options === 'object' && options !== null) {
    timeout =
      typeof options.timeout === 'number'
        ? options.timeout
        : timeoutForPriorityLevel(priorityLevel);
  } else {
    timeout = timeoutForPriorityLevel(priorityLevel);
    startTime = currentTime;
  }

  var expirationTime = startTime + timeout;

  var newTask = {
    id: taskIdCounter++,
    callback,
    priorityLevel,
    startTime,
    expirationTime,
    sortIndex: -1,
  };

	//xxx
}

从这里可以看出task的expirationTime是startTime+timeout。那就是当前时间加上timeout,所以task.expirationTime是时间越早,task.expirationTime越小。

您讲课那版本的话,他们是一样的。
但是由于新版本expirationTime是越大,优先级越高,所以fiber和task的expirationTime的优先级的逻辑是反着来的。。。

正在回答

插入代码

1回答

是这样的,因为以前是越大优先级越高,但是有个例外就是同步任务是0,这有点奇怪,所以后来改成按大小来排序了

0 回复 有任何疑惑可以回复我~
  • 提问者 MeSKiL #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-04-21 21:13:13
  • 以前的不是越小越高吗
    回复 有任何疑惑可以回复我~ 2022-02-10 17:34:37
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号