2014-05-30 3 views
5

, когда профилирование производительности в хромовых анонимных высокопроизводительных функциях трудно устранить, когда они перечислены в корне дерева вызовов. есть ли способ определить, где была впервые создана анонимная функция?профилирование анонимных функций javascript (chrome)

+3

Вы можете пропустить и назвать все ваши анонимные функции – xkcd149

ответ

0

Возможно, самый простой способ - поставить console.trace() в свою функцию.

+0

Предположим, у вас нет анонимных функций в вашем коде - возможно, вы используете библиотечный код, который их использует. – Michael

+0

Затем пламя покажет вам, где вы используете эти функции. –

1

Вы можете использовать console.profile([label]), console.profileEnd(), , console.timeEnd([label]).

В DevTools выберите Sources ->Snippets -> правой кнопкой мыши -> выберите New -> место javascript в средней панели -> выделить/выбрать текст javascript в средней панели -> правой кнопкой мыши -> выберите Evaluate in Console -> нажмите правый треугольник на правой панели или Ctrl+Enter.

Профиль для anonynous function должен быть зарегистрирован в console и на Profiles tab.

console.profile("anonymous function"); 
 
console.time("anonymous function"); 
 
(function() { 
 
    var a = 123; 
 
    function abc() { 
 
    return a 
 
    } 
 
    abc(); 
 
}()); 
 
console.timeEnd("anonymous function"); 
 
console.profileEnd();

2

Чтобы найти происхождение каждого вызова

1 - в качестве Yordan said, вы можете использовать console.trace.

2 - Вы можете также попробовать:

console.log("called from : " + arguments.callee.caller.name.toString()); 

НО это может быть невозможно в строгом режиме

window.addEventListener("load", function() { 
 
    var anon = function() { 
 
    console.log("called from : " + arguments.callee.caller.name.toString()); 
 
    }; 
 
    
 
    function Test() { 
 
    anon(); 
 
    } 
 
    var anon2 = function() { 
 
    anon(); 
 
    } 
 
    
 
    Test(); // will display "Test" 
 
    anon2(); // won't display a name (Anonymous caller) 
 
});

Если вам нужно профилировать блок кода (в анонимной функции или нет), вы можете использовать console.profile/console.profileEnd и console.time/console.timeEnd (se е guest271314 answer)

Недавно я сделал немного яваскрипта плагин, чтобы помочь мне отладки затраты времени в моих программах: MonitorJS (1.35KB)

Вы можете использовать его, чтобы определить, как много процессорного времени блочного кода (функция или нет) используется с течением времени.

например. :

// ... 

function Test() { 
    var mId = Monitor.Start("Foo"); 

    // Test function code 
    // ... 

    Monitor.Stop(mId); 
} 

Затем вы можете проверить в любое время в консоли:

Monitor.Get("Foo"); 
// return an object : 
{ 
    name: "Foo", 
    call_count: 32, 
    // time in milliseconds, accurate to one thousandth of a millisecond 
    total_time: 654.685 
} 
// you can calculate the average time per call 

Смотрите документацию на Github

Надеются, что это помогает!

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