Низкая производительность Phonegap и AJAX

#ajax #cordova

#ajax #кордова

Вопрос:

Я загружаю данные в свое приложение с помощью асинхронного вызова AJAX. Этот вызов занимает некоторое время, поскольку сервер работает очень медленно. Загрузка приложения на рабочий стол или телефон в виде веб-сайта показывает ожидаемое поведение: страница загружена — некоторая задержка — обновление сайта загруженными данными. При запуске страницы с использованием phonegap отображается экран-заставка, затем черный экран и через очень долгое время (время выполнения вызова ajax) обычный экран. Я предполагаю, что есть какая-либо причина, по которой Phonegap ожидает завершения вызова перед отображением содержимого. Можно ли это предотвратить / настроить?

Пример кода:

 function connect(){
    var username = window.localStorage.getItem( 'username' );
    var password = window.localStorage.getItem( 'password' );
    if(username!=nullamp;amp;password!=null){
    jQuery.ajax({
            async: true,
            type : "GET",
            dataType: 'json',
            url : loginURL,
            success : function(data) {

                token=data.token;


                connected=true;
                oSettingsTile.setInfo("Connected");
                oSettingsTile.setInfoState(sap.ui.core.ValueState.Success);

                var oFeedModel=new sap.ui.model.json.JSONModel();

                jQuery.ajax({
                type : "GET",

                url : feedURL,
                dataType : "json",
                async: true,
                success : function(data,textStatus, jqXHR) {


                  oFeedModel.setData(data); 
                  oFeedTile.setInfoState(sap.ui.core.ValueState.None);
                  oFeedTile.setNumber(oFeedModel.getProperty("/list/length"));

                },
                error : function(err){
                  oFeedTile.setInfo("Error loading");
                  oFeedTile.setInfoState(sap.ui.core.ValueState.Error);
                }

                });

                var oGroupModel=new sap.ui.model.json.JSONModel();
                jQuery.ajax({
                type : "GET",
               url : groupURL,
                dataType : "json",
                async: true,
                success : function(data,textStatus, jqXHR) {
                  oGroupModel.setData(data); 
                  oGroupTile.setInfoState(sap.ui.core.ValueState.None);
                  oGroupTile.setNumber(oGroupModel.getProperty("/list/length"));

                },
                error : function(err){
                  oGroupTile.setInfo("Error loading");
                  oGroupTile.setInfoState(sap.ui.core.ValueState.Error);
                }

                });

                feedView.setModel(oFeedModel);
                feedDetailView.setModel(oFeedModel);

                groupView.setModel(oGroupModel);
                groupDetailView.setModel(oGroupModel);


            },
            error : function(err,status,errT){
              token="";
              oGroupTile.setNumber(0);
              oFeedTile.setNumber(0);
              connected=false;
              oSettingsTile.setInfo("Error");     
              oSettingsTile.setInfo(sap.ui.core.ValueState.Error);

            }

        });
    }

}
  

Комментарии:

1. Я прокомментировал часть загрузки ajax: jQuery.ajax({ тип: «GET», тип данных: ‘json’, URL: «…», успех: функция (данные) { …. Теперь загрузка происходит в течение 1 секунды. Итак, это вызов ajax, которого ожидает Phonegap

Ответ №1:

вы можете подумать, что страница загружается при включенном заставочном экране, но это не так. Весь html / css / js загружается после отключения splashscreen, поэтому, если у вас медленный сервер, это продлится некоторое время, пока вы не увидите содержимое.

Комментарии:

1. Почему это зависит от сервера? Все содержимое хранится локально, а данные загружаются асинхронно. Загрузка одного и того же приложения в веб-браузере происходит быстро. Я думаю, что phonegap ожидает любого сигнала

2. Медленный отклик не всегда необходим из-за того, что cordova / phonegap не использует javascript, но больше зависит от кода и доступной инфраструктуры. Используете ли вы какой-либо специальный фреймворк пользовательского интерфейса? Phonegap не ожидает никаких сигналов, вам следует только следить за событием deviceready. Если у вас большой объем данных, я рекомендовал использовать метод отложенной загрузки вместо того, чтобы показывать только некоторые биты во всех данных. Сначала убедитесь, что ответ сервера стабилен и приемлем.

3. Я заметил, что у вас есть вложенные ajax-запросы, так что на это тоже стоит обратить внимание, я рекомендовал изолировать каждый вызов и вместо записи других ajax-запросов внутрь использовать обратный вызов и внутри обратного вызова поместить свой запрос. Имейте в виду, что из-за асинхронности не рекомендуется запускать несколько вызовов ajax одновременно или параллельно (вы не будете знать, когда точно каждый вызов завершил свою работу, и вы расходуете свой call compite на пропускную способность Интернета устройства), из-за этого я столкнулся с некоторыми проблемами, поэтому попробуйте вызывать каждый запрос после завершения другого с помощью обратных вызовов, дайте ему tru.