2016-11-22 2 views
0

Пытаюсь времени, сколько времени файл, необходимое для загрузки используя HTTPRequest так:setInterval на 1мс, кажется, не быть на самом деле 1мс

function getFile() { 
    'use strict'; 
    var url = "data.bin"; 
    var rawFile = new XMLHttpRequest(); 
    var timer_var = setInterval(theTimer, 1); 

    rawFile.open("GET", url, true); 
    rawFile.onreadystatechange = function() { 
     if(rawFile.readyState === XMLHttpRequest.DONE && rawFile.status === 200) { 
      toLog(rawFile.responseText); 
      window.clearInterval(timer_var); 
      toLog("Milliseconds for download: " + time_taken); 
     } 
    }; 
    rawFile.send(null); 
} 

function theTimer() { 
    'use strict'; 
    toLog(time_taken); 
    time_taken++; 
} 

Как вы можете видеть, я setIntervaltheTimer вызова каждый одна миллисекунда. Все thetimer() делает это приращение переменной, которая теоретически должна иметь значение в миллисекундах от того, как долго выполнялся интервал.

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

Почему не setInterval действительно каждые 1 мс?

+0

Возможный дубликат [Что такое минимальная миллисекунда значения setTimeout?] (Http://stackoverflow.com/questions/9647215/what-is-minimum-millisecond-value-of-settimeout) –

+1

Если вы хотите знать, как долго что-то взялось, сравнить временные метки. 'setInterval' и семейный огонь когда-то после заданной задержки, когда он получает шанс. –

+0

Привет, Алекс, отметки времени! конечно. –

ответ

0

From the docs:

Задержка

время, в миллисекундах (тысячных долей секунды), таймер должен задержка между выполнением указанной функции или кода. Если этот параметр меньше 10, используется значение 10. Обратите внимание, что фактическая задержка может быть более длинной;

(Mozilla, но и другие браузеры, кажется, используют аналогичные значения)

Существует также ссылка на the documentation of setTimeout упоминая причин, почему «фактическая задержка может быть больше».

Короче:

  • Существует минимальная задержка (уже в спецификации) для вложенных таймаутов
  • неактивных вкладок может зажим таймаута для уменьшения нагрузки
  • страницы/браузер/OS может быть занят с другими задачами

В современных браузерах, кажется, a way using window.postMessage.

+0

Благодарим за объяснение задержки в setTimeout/setInterval. Я думаю, что сравнение временных меток - хороший способ пойти. –

Смежные вопросы