Конечно, Firebug, Chrome Web Inspector, Opera Dragonfly и инструменты AjAX для IE от dynaTrace имеют возможности профилирования.Однако я не нашел инструмента, который позволял бы мне «игнорировать» библиотеку.
В качестве примера предположим, что у меня есть следующий чистый код 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 других, а другая -« навсегда », вызывающая функция будет иметь большее« общее время », но это выиграло»t позволяет вам выяснить, какая из вызываемых функций занимает больше всего времени ').