как определено в этом решении
ЛЕНИЕ 1: начало использованияngProgress, но не дает требуемого эффекта в IE.
Финальное обновление: лучшее решение найдено. Смотрите последний ответ ниже.
Приложение AngularJS имеет несколько вкладок, и каждая вкладка может иметь до 100 полей. Данные извлекаются из БД с использованием нескольких вызовов Ajax, и связанный цикл используется для инициализации каждого из следующих элементов: правила проверки, элементы раскрывающегося списка и, наконец, значения полей. В некоторых случаях мы используем комбинацию Javascript и AngularJS способом, чтобы получить требуемый эффект.
Имейте в виду, что загрузка правил валидации включает в себя изменение директивы, такой какng-required
а такжеng-max
который потребует использования$compile
активировать правило проверки.
Этот вопрос состоит из двух частей:
AngularJS App имеет заметный эффект медленной загрузки под IE. Под Chrome Browser скорость загрузки намного лучше.Как мы можем устранить неполадки и проанализировать проблемы медленной загрузки под IE, чтобы точно определить местонахождение проблемы? Как я могу работать с инструментами анализа производительности под IE?
Тем временем мы думаем добавить индикатор прогресса, который будет обновляться после завершения загрузки каждой из частей данных, упомянутых выше: правил проверки, элементов раскрывающегося списка и значений полей.Я реализовал плагин ngProgress в своем проекте, и он прекрасно работает в Chrome, но в IE он не дает требуемого эффекта. Индикатор выполнения отобразится и завершится в самом конце загрузки страницы. Похоже, под IE, индикатор выполнения не будет отображаться сразу в начале рендеринга страницы. Имейте в виду, что в моем проекте я широко использую директиву, и большое количество из них используют$compile
оказание услуг.
Я провел некоторое исследование и понял, что IE не будет обновлять дисплей DOM немедленно ... он будет ждать до более поздней стадии, чтобы обновить все сразу, или, по крайней мере, это было мое понимание. Итак, хитрость в том, как заставить IE отражать изменения DOM как можно скорее.
Я использовал этот подход, который помог получить лучшие результаты под IE:
app.controller('formMainController', ['$scope', '$timeout', '$interval', 'ngProgressFactory',
function($scope, $timeout, $interval, $q, ngDialog, ngProgressFactory) {
$scope.progressbar = ngProgressFactory.createInstance();
$scope.progressbar.start();
$scope.stopProgressbar = $interval(function(){
$scope.progressbar.setParent(document.getElementsByTagName("BODY")[0]);
},10);
...
...
//After getting all data from DB
$scope.mainPromise.then(function(success) {
$interval.cancel($scope.stopProgressbar);
$timeout(function(){
$scope.progressbar.complete();
}, 3000);
return 'main promise done';
})
}]);
С учетом вышеизложенного, в IE я вижу индикатор выполнения, который отображается намного раньше, чем раньше, затем он будет прогрессировать в 2 шага, затем он будет зависать в течение примерно 2 секунд, а затем продолжится в обычном режиме. Когда я вижу окно консоли, я вижу, что оно зависнет, пока выполняются многие другие директивы, особенно те, которые используют$compile
обслуживание сpriority: 100
а такжеterminal: true,
.
Есть идеи как сделать лучше?
Замечания:Эта тема есть похожая проблема, но я не нашел соответствующего решения.
Тарек