我正在开发SAPUI5version: 1.56.13
,这是一个只有Android平台的Cordova混合应用程序。
我想知道是否有办法在用户执行其他操作(例如查看其他页面)时预加载视图(在后台/异步模式下),因此当用户想要导航到该预加载视图时,它会在性能方面快得多。
用户首次导航到视图大约需要30 秒才能显示视图。
第二次打开它大约需要5 秒。
我在用户在另一个视图上时尝试过:
- 在后台实例化视图。
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;
});
调用服务以检索视图模型的数据并为模型设置数据。
getDataFromService(this, oData => { let oModel = this.getOwnerComponent().getModel(Constants.MY_DATA_MODEL) oModel.setData(oData); });
在
attachInit
方法初始化视图:new sap.ui.xmlview({viewName:"myViewFolder.MyView"}).placeAt("content");
导航到视图:
appScope.getRouter().navTo("MyView")
我看到只有当我在导航步骤上时,视图才会开始呈现,因为应用程序会记录以下内容:
Log-dbg.js:414 2019-07-11 12:36:45.609300 在克隆操作期间,发现一个模板既没有标记为"templateSharedable:true"也没有标记为"templateSharedable:false"。框架不会破坏模板。这可能会导致错误(例如重复的 ID)或内存泄漏(模板用于对象"__list4"的聚合"项目")。有关详细信息,请参阅"聚合绑定"下的文档。-
这表示视图正在呈现,因为它在列表中有一些列表,其中包含自定义元素,以根据模型生成视图。
简报:
- 上下文:Cordova与SAPUI5(XML和JS)和Android平台。
- 目标:在后台预加载视图,以便当用户需要导航到此视图时,该视图已经加载,因此导航时间会缩短(性能改进)。
- 相关信息:视图加载速度很慢,因为列表中有带有自定义元素的列表。大多数情况下,所有视图都是从列表内的列表动态生成的。
我以前使用过 Cordova 和 Openui5,我可以将初始加载时间缩短到 3 秒以内,单个页面加载在初始加载后接近即时。
以下是我所做的一些事情,大大提高了我的表现:
-
不要使用 CDN,而是下载移动运行时并从 Cordova 中提供它。如果加载页面需要 30 秒,其中 99% 可能是从 SAP CDN 下载文件的网络时间。
-
使用预加载文件。如果您的应用程序在显示页面之前下载每个模块,那么您将拥有巨大的网络开销。默认情况下,UI5 附带了 sap 库的库预加载文件。当您查看网络选项卡时,您将知道它的工作原理,并且在您最初打开应用程序时看到应用程序正在加载库预加载.js文件。要打开它,我认为您只需要遵循以下内容:https://openui5.hana.ondemand.com/#/topic/676b636446c94eada183b1218a824717
-
您还可以使用以下方法为自己的源代码构建预加载文件: https://github.com/SAP/grunt-openui5 这会将所有源代码放入一个文件中,该文件将在您首次打开应用程序时加载。这是应用程序生命周期内的 250 个 HTTP 请求与应用程序启动时的 1 个 HTTP 请求之间的差异。
我认为性能的最大收益可以按我上面给出的选项顺序找到。最简单的好处是将加载点从 CDN 更改为 UI5 的本地副本。您可以轻松地看到启动时间从 30 秒下降到 3 秒,页面浏览量从 5 秒下降到 1 秒。
祝你好运!