как определено в этом решении

ЛЕНИЕ 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, .

Есть идеи как сделать лучше?

Замечания:Эта тема есть похожая проблема, но я не нашел соответствующего решения.

Тарек

Ответы на вопрос(5)

Ваш ответ на вопрос