Равные тайм-ауты выполняются в порядке в JavaScript?

Procs по причинам, упомянутым другими и также, легче настроить proc с профилировщиком или частями proc. Таким образом, Вы не должны говорить кому-то запускать его приложение для обнаружения то, что отправляется на SQL-сервер

, Если Вы действительно используете специальные запросы, удостоверяются, что они параметризованы

26
задан Petter Friberg 24 January 2019 в 21:48
поделиться

3 ответа

Короче, не рассчитывайте на это. Взгляните на этот .

Здесь много информации цифра, чтобы переварить, но понять это полностью даст вам лучшее осознание того, как асинхронный Выполнение JavaScript работает.

4
ответ дан 28 November 2019 в 07:36
поделиться

Я прочитал исходный код Firefox, и, по крайней мере, для этого браузера есть гарантия последовательности для таймаутов, которые указаны в неубывающем порядке. В противном случае все ставки отключены.

В частности, если в данном контексте выполнения вы устанавливаете тайм-аут для n, а затем один для m, где n <= m, цели будут выполняться в том порядке, в котором были установлены тайм-ауты.

Но не верьте мне на слово. Я считаю, что реализация окна находится в nsGlobalWindow.cpp, а метод, который фактически определяет, где тайм-ауты идут в очереди выполнения, называется InsertTimeoutIntoList . Похоже, что метод проходит очередь в обратном направлении, ища первый тайм-аут, который меньше или равен заданному таймауту, и вставляет заданный тайм-аут после него.

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

13
ответ дан 28 November 2019 в 07:36
поделиться

Существует определенный минимум, который действительно может быть задержкой, и он во многом зависит от ОС, браузера, активности браузера и загрузки компьютера. Я стараюсь не опускаться ниже 20 мс, поскольку считаю, что меньшее значение не имеет никакого значения.

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

Если вы хотите убедиться, что это будет сделано, чтобы я делал что-то вроде этого:

setTimeout(function() { 
  foo();
  setTimeout(bar, 20)
}, 20);

Это всегда будет гарантировать порядок.

Если вы используете Firefox, чтобы убедиться, что ваш javascript действительно многопоточный, вы можете посмотреть WebWorker, который поддерживается в новых браузерах, но не в IE.

1
ответ дан 28 November 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: