2015-03-18 6 views
1

Наш веб-приложение построено с AngularJS v1.2.26 Мы диагностирование проблем, которые, кажется, только произойдут на старых браузерах Android, в частности, 4,2 ...AngularJS + Android 4.2: очень медленно реагируют

Короче говоря, асинхронные вещи происходят на 600% медленнее, чем должны. Например, мы показываем сообщение об ошибке в ответ на неудавшийся запрос HTTP. Служба, отвечающая за выполнение запроса, имеет переменную, содержащую сообщения о состоянии. Затем контроллер наблюдает так:

// Status msg ctrl 
var statusCtrl = app.controller('statusCtrl', function($scope, updateService, $timeout) { 

    $scope.message = false; 
    //watch for status messages 
    $scope.$watch(function() { return updateService.loadingTroubleMsg; }, 
    function (value) { 
     $scope.message = value; 
    } 
); 

}); 

В других браузерах это работает отлично. HTTP-запрос завершается с ошибкой, после чего сообщение появляется сразу. В браузере Android (который работает клиент с USB) сообщение появляется через ~ 20 минут.

У меня есть несколько теорий:

  1. Обещание принимает очень много времени, чтобы быть решен,
  2. $watch является happing в замедленном движении.
  3. HTTP-запрос принимает повторно долгое время до таймаута.

Нет видимых ошибок, и все остальное, кажется, работает. К сожалению, у меня нет точного устройства USB Android в моем положении, что затрудняет устранение неполадок.

Зачем это произошло? Являются ли какие-либо из моих теорий более правдоподобными, чем другие? Любые советы о том, как добраться до основания, приветствуются.

+0

'обещания' являются очень дорогим« синтаксическим сахаром »для приложений JS. Почему бы не сделать его более естественным? – Thevs

ответ

0

Это оказалось # 3. Я добавил ограничение «тайм-аут» в настройки конфигурации http http, и он начал нормально отвечать. Я не знаю, почему это имело значение только для Android 4.2. Я предполагаю, что это связано с отсутствием (родной) поддержки обещаний.

Смежные вопросы