2015-04-05 1 views
0

Я пытаюсь выполнить выполнение моей функции в миллисекундах. Я использую выступление.now() чтобы сделать это. Я могу получить время на первом запуске, но на втором, третьем и т. Д. Я получаю 0 миллисекунд. Вот пример:Сроки с javascript performance.now()

function someFunction(){ 
    var t0 = performance.now(); 
    //Function calculations 
    var t1 = performance.now(); 
    Console.log(t1 - t0); 
} 

запускает функцию OnClick. Он работает, когда я впервые запускаю страницу. Он перестает работать над вторым кликом. t0 и t1 получают одинаковые значения, и когда я их вычитаю, я получаю 0 за время. Во всяком случае, вокруг? Мне не обязательно использовать функцию performance.now(). Я просто хочу измерить время в миллисекундах.

спасибо.

Обновление Я думаю, что это имеет все, что связано со скоростью. Например:

<html> 
 
    <script type="text/javascript"> 
 
    \t function someFunction(){ 
 
     var t0 = performance.now(); 
 
     console.log(t0); 
 
     //Function calculations 
 
     //Some loop 
 
     var counter = 0; 
 
     for (i = 0; i < 1000000; i++) { 
 
     \t counter ++; 
 
    \t } 
 
     var t1 = performance.now(); 
 
     console.log(t1); 
 
     console.log(t1 - t0); 
 
    } 
 
    
 
    </script> 
 
    
 
    <button type="button" onclick="someFunction()">Click me</button> 
 
    </hmtl>

Работы, как я хотел бы ожидать, но с петлей for (i = 0; i < 1000; i++) нет.

Благодарим за указатели в правильном направлении.

+0

Возможно, браузер оптимизирует код в первом прогоне, поэтому следующие быстрые. – Oriol

+0

Я бы предложил вам показать нам фактический код, который вы пытаетесь измерить в jsFiddle. Помимо этого факта, что это 'console.log (t1 - t0)' с нижним регистром 'c', нет ничего плохого в коде, который вы показали, поэтому время идет буквально так быстро, что оно выходит как' 0' ms или что-то еще не так в коде, который вы не показываете. – jfriend00

+0

Просто скопировал ваш код и протестировал его. Каждый раз, когда он дает мне результаты больше 0. Возможно, также укажите, что браузер и операционная система вы используете? – TimeString

ответ

0

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

Тем не менее, микро-тесты в JavaScript в эти дни регулируются optimizations. Например:

function spiffy() { 
    /* long bit of code that 
     loops and loops and runs in 
     O(n!) time then finally */ 
    return result; 
} 

Spiffy!

Скажем, spiffy() детерминистически всегда выводит одинаковый результат. Оптимизатор разрешено работать эффективно, как это:

function spiffy() { 
    return 42; 
} 

который превращает

function someFunction(){ 
    var t0 = performance.now(); 
    var result = spiffy(); 
    var t1 = performance.now(); 
    Console.log(t1 - t0); 
} 

в бесполезную результат теста.

Если у вас есть проблемы с эффективностью работы с бета-версией в вашем приложении JavaScript, я бы просмотрел его, когда он запустил slower than molasses и проанализировал самые загружаемые части вашего кода. И я не имею в виду микро-тесты, но examining run-time, look at the algorithm, которые вы используете в этом разделе, и посмотрите, может ли быть лучше для ваших обстоятельств, и, наконец, спросите кого-нибудь о фактическом коде , в в том же контексте он запущен.

+0

Благодарим за информацию. Я новичок в Javascript, и я не знал, как работает оптимизатор. Думаю, я понял, в чем проблема. Еще раз спасибо за указатели в правильном направлении. – slrom