【问题标题】:Phonegap and AJAX bad performancePhonegap 和 AJAX 性能不佳
【发布时间】:2014-07-07 05:39:24
【问题描述】:

我正在使用异步 AJAX 调用将数据加载到我的应用程序。此调用需要一些时间,因为服务器非常慢。将应用程序加载到桌面或手机上作为网站显示预期的行为:页面加载 - 一些延迟 - 加载数据的站点更新。使用 phonegap 执行页面显示的是启动屏幕,而不是黑屏,并且在很长一段时间(执行 ajax 调用的时间)之后是正常屏幕。我认为 Phonegap 有任何理由在显示内容之前等待呼叫完成。这可以防止/配置吗?

代码示例:

function connect(){
    var username = window.localStorage.getItem( 'username' );
    var password = window.localStorage.getItem( 'password' );
    if(username!=null&&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);

            }

        });
    }

}

【问题讨论】:

  • 我评论了ajax加载部分:jQuery.ajax({ type : "GET", dataType: 'json', url : "...", success : function(data) { ... . 现在加载是在 1 秒内。所以它是 Phonegap 正在等待的 ajax 调用

标签: ajax cordova


【解决方案1】:

您可能会认为,在启动画面打开时正在加载该页面,但事实并非如此。整个 html/css/js 在启动画面消失后加载,因此如果您的服务器速度较慢,它将持续一段时间直到您看到内容。

【讨论】:

  • 为什么要依赖服务器?所有内容都存储在本地,数据异步加载。在 Web 浏览器中加载相同的应用程序很快。我认为 phonegap 正在等待任何信号
  • 由于cordova / phonegap,不是javascript而是更多关于代码和可用基础设施的响应并不总是必要的。您是否使用任何特殊的 UI 框架? Phonegap 不等待任何信号,您应该只注意 deviceready 事件。如果您有大量数据,我建议使用延迟加载方法,而不是让整个数据只显示一些位。首先确定服务器响应是否稳定且可接受。
  • 我注意到您有嵌套的 ajax 请求,所以这也是值得关注的,我建议隔离每个调用,而不是在内部编写其他 ajax 请求,使用回调并在回调中放置您的请求.请注意,由于异步性质,不建议同时或并行触发多个 ajax 调用(您将不知道每个调用究竟何时结束其工作并且您消耗您的调用竞争以获取设备互联网带宽),我遇到了一些因此出现问题,所以尝试在另一个请求结束后使用回调调用每个请求,给它一个 tru。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
相关资源
最近更新 更多