共计 1897 个字符,预计需要花费 5 分钟才能阅读完成。
咱们能够将挪动利用程序开发为蕴含原生应用程序包装器(例如 PhoneGap),和用于在用户界面上显示内容的 HTML 查看器的混合应用程序(Hybrid Web Container)。
混合利用的劣势在于能够在利用商店中公布它们。此外,通过将利用程序代码和 SAP UI5 库文件嵌入到混合容器中,用户只需装置一次文件,无需每次启动应用程序时下载。
然而库的大小变得很重要,因为每个用户都必须安装文件,而在 Web 应用程序中,库部署在服务器上,用户只须要在运行时下载库的所需局部。
要在混合应用程序中蕴含须要的资源,能够应用动态挪动运行时包 openui5-runtime-mobile*.zip
。该包不蕴含在 SAP UI5 中,而是蕴含在 开源版本 OpenUI5
中。
这些包的库大小相当小,因为最有可能不须要的内容已被删除,例如测试页面。一个 package
蕴含所有 JavaScript 文件的调试版本以及优化和最小化的版本。因而,能够将包用于生产用处以及调试目标。要在应用程序包装器(例如 PhoneGap)中应用此包,请将包解压缩到利用程序开发我的项目的相应资源地位。而后,应用程序包装器构建蕴含文件并使其在运行时可用。
为了管制文件构建出的包文件尺寸,它只蕴含最有可能应用的控件库,而不是所有控件库。依据混合应用程序的不同,可能须要通过从运行时的相应文件夹复制库来增加库,或者删除库以减小包大小,从而缩小用户的装置大小。
该文件蕴含以下管制库:
- sap.f
- sap.m
- sap.tnt
- sap.ui.core
- sap.ui.layout
- sap.ui.suite
- sap.ui.unified
- sap.uxap
蕴含或不蕴含哪些库的决定可能不存在相对主观的规范。它仅基于教训法令,并且无论如何都须要对许多应用程序进行调整。
此外,挪动 / 混合包不包含通常不须要的某些类型的文件。每个客户理论的利用场合都可能会有所不同,因而须要依据特定利用的要求增加相应的文件。原本 SAP UI5 利用里设计出的 library-preload.js,蕴含了该 library 里的所有控件。采纳这种文件来加载库,能够缩小 HTTP 申请数量。
然而 SAP UI5 的 Hybrid Web Containers 不再须要 library-preload.js
文件,因为在混合应用程序的执行环境里是从本地加载库文件,没有任何的 HTTP 提早。SAPUI5 默认会尝试拜访它们,因而您可能会在日志文件或开发人员工具中看到加载这些文件的尝试失败。然而,这些谬误音讯并没有什么影响,您能够通过申明不存在此类文件并在 SAPUI5 疏导脚本标记中设置以下配置来打消它们:
data-sap-ui-preload=""
package 尺寸的优化
只管动态包足够小,能够蕴含在混合应用程序中,但依然能够通过删除其余文件来进一步减小大小并优化特定应用程序的内容。以下列表提供了一些示例:
- 如果不须要相应的管制库,您能够删除所有库文件夹。例如,在 OpenUI5 版本中能够删除
suite
和unified
文件夹。 - 在每个 /resources/sap/ … /themes 文件夹中,能够删除所有主题文件夹,但正在应用的主题文件夹除外。
device ready event
混合 Web 容器须要一些工夫进行初始化。在此期间,AJAX 申请的发送被阻止,这意味着一旦发送 AJAX 申请,JavaScript 代码就会进行,代码执行也会进行。这会导致 UI 处于 freeze
状态。
SAPUI5 中的 OData 模型在外部应用 AJAX 申请,因而必须在混合容器筹备好后再进行 OData 模型初始化,以防止用户界面解冻。初始化后,混合 Web 容器会触发一个 device ready
事件。为了防止 UI freeze,请将创立 OData 模型并进行模型绑定的相干代码,移至 device ready
事件侦听器中。
例子:
<!-- put the following code in the beginning of the application code -->
function appReady(){sap.ui.getCore().setModel(new sap.ui.model.odata.v2.ODataModel(<ODATA_URL>));
}
<!-- bind to the deviceready event -->
document.addEventListener("deviceready", appReady, false);
</script>
跨域限度(Cross Domain Restrictions)
如果应用 AJAX 从内部服务器或服务加载数据,则必须在混合 Web 容器内配置内部域,以使 AJAX 申请通过跨域限度。