Конечно, Firebug, Chrome Web Inspector, Opera Dragonfly и инструменты DynaTrace AJAX для IE имеют возможности профилирования. Однако я не нашел инструмент, который позволяет мне игнорировать библиотеку.
Чтобы привести пример, предположим, что у меня есть следующий чистый код JS/DOM:
function foo(node) {
for (var i = 0; i < node.childNodes.length; i++) {
node.childNodes[i].innerHTML = 'Test';
}
}
и аналогичный бит кода, который использует jQuery:
function bar(jqNode) {
jqNode.children().each(function() {
$(this).html('Test');
});
}
(примеры - не совсем отличный код, пожалуйста, оставьте их такими, как это не так)
Если вы бросите оба через профилировщик JS, вы обнаружите, что в первом примере есть только одна функция, где "собственное время" функции равно "суммарному" времени, проведенному в функции, - как манипуляции с DOM считаются "собственным временем".
Однако в примере jQuery все это абстрагируется от jQuery, что означает, что "собственное время" минимально и все время тратится на jQuery.
Это затрудняет поиск узких мест производительности, потому что функции с самым высоким "собственным временем" - это jQuery.fix
и jQuery.init
и такие (что не говорит мне ничего о том, как хорошо написано (или нет) мой код), а функции с наивысшим "общим временем" обычно слишком высоки в стеке вызовов, чтобы выяснить, где находится фактическая проблема (если у вас есть одна функция, которая называет 10 других, а одна занимает "навсегда", вызывающая функция будет иметь большее "общее время", но это не позволит вам определить, какая из вызываемых функций занимает самое длинное ").