线程池造成的溢出有什么办法吗?

项目引擎是个V8魔改,引擎屏蔽了原生的js的计时函数setTimeout,只给了一个Schedule(sec , callback ) 的延迟函数

因为react是基于 setTimeout, clearTimeout,做刷新的。我们写了polyfill

export const setTimeout = <TArgs extends any[]>(
  callback: (...args: TArgs) => void,
  timeout = 0,
  ...args: TArgs
): number => $.Schedule(timeout / 1000, () => callback(...args));

我们发现这些写造成了内存泄漏。怀疑这个函数是另一个线程的,并且没有回收。每次刷新页面会增加300多m内存,5-6次前端界面就崩了
我尝试过改成异步执行,效果也不好,内存占用更多了

export const setTimeout = <TArgs extends any[]>(
  callback: (...args: TArgs) => void,
  timeout = 0,
  ...args: TArgs
): number => {
  timeout /= 1000;
  const intervalId = getNextIntervalId();
  new Promise((resolve) => {
    $.Schedule(timeout, () => resolve?.(0))
  }).then(() => callback(...args))
  return intervalId
};

有没有全栈大佬给分析一下?

阅读 1.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏