好消息是,仅仅因为您的代码在浏览器中启动了一项任务并不意味着您必须等到该任务完成后才能将控制权返回到主线程。 之前的长任务 您可以通过在任务中明确放弃来分解较长的任务。 简单来说,任务让步可以确保浏览器不会过于专注于一项任务而错过或延迟响应其他重要任务或用户交互。 之后的长任务 不幸的是,当前的收益策略并不完美…… 为什么使用 scheduler.yield():当前收益策略的问题 让步到主线程并不是一个新概念。开发人员一直在使用不同的让步策略来分解长任
务: 1. 设置超时时间 setTimeout()允。
即使您指定的超时时间为 0,这也会将回调的执行推迟到单独的任务中。当您有多个应相继运行的函数时,此方法非常有效。 缺 律师数据库 点:无法保证精度。由于队列中还有其他任务,回调可能无法在指定的延迟后准确运行。此外,如果您在循环中处理大量数据集,则该任务可能会变得非常耗时,尤其是在有数百万个条目的情况下。 2. requestIdleCallback() requestIdleCallback()允许您安排任务在浏览器可能存在的任何空闲期间运行。
它对于执行非紧急任务而不影响用户体验非常有用。
缺点:requestIdleCallback()以最低优先 的简洁设计和用户体验使安排 级安排任务,这意味着如果主线程拥挤,安排的任务可能永远无法运行。 3. isInputPending() isInputPending()可以随时执行,以检查用户是否正在尝试与页面上的元素交互。如果是,则该函数返回true;如果不是,则返回false。 假设您有一系列
任务要执行,但又不想打断用户交互。您可以使用isInputPending()和YieldToMain()函数来确保用户与页面交互时输入不会延迟。
缺点:isInputPending()可能不 BZB 目录 会总是在用户输入后立即返回 true。这是因为操作系统需要时间来告知浏览器交互已发生。这意味着其他代码可能已经开始执行。 这些是一些常用的让出主线程的方法。如你。