Я использую ionic, и он занимает более 1 с между $ionicView.beforeEnter
и $ionicView.enter
.
Как я могу найти, какая часть моего кода занимает так много времени? Батаран не очень помогает мне, и я не могу понять, как легко это сделать...
Я использую ionic, и он занимает более 1 с между $ionicView.beforeEnter
и $ionicView.enter
.
Как я могу найти, какая часть моего кода занимает так много времени? Батаран не очень помогает мне, и я не могу понять, как легко это сделать...
Вероятно, не очень полезно, но когда у меня была аналогичная проблема, я не смог найти виновника с использованием профайлера отладки Chrome и должен был комментировать/исключать части кода в моем контроллере, к которому я перехожу один за другим. Проблема заключалась в том, что какой-то компонент календаря третьей стороны, сконфигурированный на этапе инициализации контроллера, замедлял переход (просмотр отображения). Когда-то прокомментировал, что все работает нормально. Поскольку это не был мой код, и я не хотел с ним связываться, мне пришлось добавить прогресс-переходник на переход.
Возможно, вы можете использовать инструменты отладки, предоставляемые с Chrome, такие как Timeline или Profile: вы начинаете профилирование или запись временной шкалы и проверяете, что происходит между $ionicView.beforeEnter и $ionicView.enter. Обе функции имеют модуль поиска, поэтому вы можете искать $ionicView.beforeEnter
и видеть, что занимает время до $ionicView.enter
. Это, вероятно, не самый простой способ, но надеюсь, что это поможет вам.
Пробовали ли вы отслеживать трафик на вкладке "Сеть" в консоли? Время в ms - хороший показатель того, что вызовы xhr работают дольше, чем ожидалось... запустите тест скорости.
В противном случае, если вы используете хром, я бы просто сбросил несколько операторов debugger
во время потока этого состояния представления Ionic.
Я не могу придумать простой способ сделать это. Но распространяясь на то, что упомянуто @nico_, используя хром-инструмент для отладки javascript, вы должны установить точку останова на $ioniView.beforeEnter
и точку останова на $ionicView.enter
, затем выполнить код между точками останова.
Вы можете узнать больше об инструментах отладки chrome javascript и о том, как настроить точки останова здесь: https://developer.chrome.com/devtools/docs/javascript-debugging
Не существует кода "между точками останова"... Существует так много функций, вызываемых между двумя событиями...
- Tyrius
Вы должны попытаться определить функции, которые занимают слишком много времени для запуска.
Примечание.. Я полагаю, что ваше приложение не замедляется загрузками, вы можете проверить время загрузки в инструментах Chrome Dev (если TTFB слишком высок, вы можете иметь медленность на стороне сервера).
Если вы знаете, какие функции вызывают, у вас есть две возможности:
Когда есть несколько функций и не вызывается слишком много раз:
function ExampleFunction() {
console.time("ExampleFunction");
// ExampleFunction code
// ...
console.timeEnd("ExampleFunction");
// output in console time between time() call and timeEnd() call
}
Если много функций вызывается много раз:
Я предлагаю вам использовать мой маленький инструмент JS под названием MonitorJS, чтобы помочь вам идентифицировать блоки кода, занимающие слишком много времени для запуска:
function ExampleFunction() {
let mId = Monitor.Start("ExampleFunction");
// ExampleFunction code
// ...
Monitor.Stop(mId);
}
и когда вы увидите, какая функция занимает слишком много времени, вызовите эту функцию:
function ShowMonitorRecords() {
// get all records sorted by total_time desc
let records = Monitor.GetAll().sort((a,b)=>{ return b.total_time - a.total_time; });
// print every records
for (let record of records) {
let avg = record.total_time / record.call_count;
console.log(record.name + ": " + record.total_time.toFixed(2)
+ "ms - called " + record.call_count
+ " time(s) - average time : "+ avg.toFixed(2) +"ms");
}
}
// will output something like :
// Foo: 7234.33ms - called 2 time(s) - average time : 3617.16ms
// Bar: 6104.25ms - called 3 time(s) - average time : 2034.75ms
Как только вы узнаете, какая функция занимает слишком много времени, вы можете уменьшить область запуска/остановки, чтобы определить точный блок кода, замедляющий ваше приложение и рефакторинг.
Надеюсь, это поможет!