SAPUI5 - 导航前预加载视图.性能改进



我正在开发SAPUI5version: 1.56.13,这是一个只有Android平台的Cordova混合应用程序。

我想知道是否有办法在用户执行其他操作(例如查看其他页面)时预加载视图(在后台/异步模式下),因此当用户想要导航到该预加载视图时,它会在性能方面快得多。

用户首次导航到视图大约需要30 秒才能显示视图。

第二次打开它大约需要5 秒

我在用户在另一个视图上时尝试过:

  1. 在后台实例化视图。
sap.ui.view({
viewName: "myViewFolder.MyView",
controller: sap.ui.controller("myControllerFolder.MyController"),
type: sap.ui.core.mvc.ViewType.XML,
async: true
}).loaded().then(function(oView) {
// I save the reference on app context so use it later (now is there just for testing).
appScope.__myView = oView;
}); 
  1. 调用服务以检索视图模型的数据并为模型设置数据。

    getDataFromService(this, oData => { 
    let oModel = this.getOwnerComponent().getModel(Constants.MY_DATA_MODEL)
    oModel.setData(oData);
    });
    
  2. attachInit方法初始化视图:

    new sap.ui.xmlview({viewName:"myViewFolder.MyView"}).placeAt("content");
    
  3. 导航到视图:

    appScope.getRouter().navTo("MyView")
    

我看到只有当我在导航步骤上时,视图才会开始呈现,因为应用程序会记录以下内容:

Log-dbg.js:414 2019-07-11 12:36:45.609300 在克隆操作期间,发现一个模板既没有标记为"templateSharedable:true"也没有标记为"templateSharedable:false"。框架不会破坏模板。这可能会导致错误(例如重复的 ID)或内存泄漏(模板用于对象"__list4"的聚合"项目")。有关详细信息,请参阅"聚合绑定"下的文档。-

这表示视图正在呈现,因为它在列表中有一些列表,其中包含自定义元素,以根据模型生成视图。

简报:

  • 上下文:CordovaSAPUI5(XML和JS)和Android平台。
  • 目标:在后台预加载视图,以便当用户需要导航到此视图时,该视图已经加载,因此导航时间会缩短(性能改进)。
  • 相关信息:视图加载速度很慢,因为列表中有带有自定义元素的列表。大多数情况下,所有视图都是列表内的列表动态生成的。

我以前使用过 Cordova 和 Openui5,我可以将初始加载时间缩短到 3 秒以内,单个页面加载在初始加载后接近即时。

以下是我所做的一些事情,大大提高了我的表现:

  1. 不要使用 CDN,而是下载移动运行时并从 Cordova 中提供它。如果加载页面需要 30 秒,其中 99% 可能是从 SAP CDN 下载文件的网络时间。

  2. 使用预加载文件。如果您的应用程序在显示页面之前下载每个模块,那么您将拥有巨大的网络开销。默认情况下,UI5 附带了 sap 库的库预加载文件。当您查看网络选项卡时,您将知道它的工作原理,并且在您最初打开应用程序时看到应用程序正在加载库预加载.js文件。要打开它,我认为您只需要遵循以下内容:https://openui5.hana.ondemand.com/#/topic/676b636446c94eada183b1218a824717

  3. 您还可以使用以下方法为自己的源代码构建预加载文件: https://github.com/SAP/grunt-openui5 这会将所有源代码放入一个文件中,该文件将在您首次打开应用程序时加载。这是应用程序生命周期内的 250 个 HTTP 请求与应用程序启动时的 1 个 HTTP 请求之间的差异。

我认为性能的最大收益可以按我上面给出的选项顺序找到。最简单的好处是将加载点从 CDN 更改为 UI5 的本地副本。您可以轻松地看到启动时间从 30 秒下降到 3 秒,页面浏览量从 5 秒下降到 1 秒。

祝你好运!

最新更新