Различия между requestIdleCallback и setImmediate?

В настоящее время существует 2 различных API, направленных на разбиение задач на запланированные функции обратного вызова.

Насколько мне известно, не существует среды выполнения JavaScript (браузер или узел), которая в настоящее время реализует обе функции.

Я хотел бы лучше понять, как сравниваются эти две функции. Я понимаю, что requestIdleCallback имеет параметр timeout, который можно использовать, чтобы позволить браузеру решать, когда его вызывать, и передает объект IdleDeadline в обратный вызов, где setImmediate передал любые предоставленные аргументы, но чем отличаются эти API?

Например, являются ли следующие два примера функционально идентичными?

setImmediate(function() {
    // Do something.
});
requestIdleCallback(function() {
    // Do something.
}, {timeout: 0});

Как насчет случая, когда зарегистрировано несколько обратных вызовов, но первый работает дольше времени простоя?

Я бы подумал, что без , {timeout: 0} эти два почти идентичны, насколько вы можете надеяться - что касается вашего последнего вопроса - я сомневаюсь, что они идентичны по функциональности - но кого действительно волнуют Internet exploder и Edge

Jaromanda X 09.08.2018 04:16

@JaromandaX Вы имеете в виду, что они больше похожи на безtimeout: 0? Это кажется нелогичным. Также не забывайте Node, у которого есть только setImmediate.

Alexander O'Mara 09.08.2018 04:20

Я бы сказал, что setImmediate действительно странный, если вы действительно хотите быть Immediate, почему бы просто не выполнить его?

apple apple 09.08.2018 04:21

re node - да, но вы сказали there are no browsers which currently implement both features - что предполагает, что вы даже не заботитесь об узле - и давайте посмотрим правде в глаза, если идея состоит в том, чтобы использовать два метода по мере необходимости для достижения одного и того же результата во всех браузерах, то, что делает node, это не имеющий отношения

Jaromanda X 09.08.2018 04:22

@appleapple Да, имя плохое (не знаю, как это имя было выбрано). На самом деле я не хочу "немедленно" столько, сколько в следующий раз.

Alexander O'Mara 09.08.2018 04:22

Хммм, интересно, может все-таки больше похоже на timeout:0

Jaromanda X 09.08.2018 04:23

Также может быть Предложение asap.

Sebastian Simon 09.08.2018 04:31

Я думаю, проблема в том, как среда выполнения думает, что это праздный. Есть формальное определение?

apple apple 09.08.2018 04:36

@appleapple Не уверен насчет «формального определения», но в браузере оно будет относиться ко времени в цикле событий, где в противном случае ему нечего было бы делать.

Alexander O'Mara 09.08.2018 04:42

Я не уверен. например если функция должна быть выполнена только в следующем кадре, остается ли это праздный?

apple apple 09.08.2018 04:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
10
635
1

Ответы 1

setTimeout подождет некоторое время, а затем выполнит обратный вызов.

requestIdleCallback будет ждать, пока основной поток будет бездействовать, прежде чем выполнять обратный вызов. Это означает, что это не будет замедлять анимацию, пользователь по-прежнему может нажимать кнопки и вводить данные.

Как выбрать между setTimeout и requestIdleCallback? setTimeout лучше всего использовать, когда должен выполняться обратный вызов (пример: отправка данных на сервер аналитики или выход пользователя из системы). requestIdleCallback лучше всего подходит, когда вы не хотите навредить пользовательскому опыту стоимостью выполнения обратного вызова (пример: повторная визуализация DOM).

Имейте в виду, что requestIdleCallback все еще является экспериментальным.

Другие вопросы по теме