在应用程序开发人员的最佳实践中,只加载您真正需要的部分是这样写的:
让你的库依赖保持最新
为您在应用程序描述符或 OpenUI5 引导程序中定义的每个库加载库预加载文件、库样式和文本翻译。始终在清单中定义库并删除您不打算在代码中使用的所有库。
例如:
"sap.ui5": {
"dependencies": {
"minUI5Version": "1.85.0",
"libs": {
"sap.ui.core": {},
"sap.m": {},
"sap.ui.layout": {}
}
}
...
}
我的问题:
我是否理解正确,在
libs
中,我必须添加出现在 UI5-app 的任何控制器的 sap.ui.define([…])
中的所有库?
如果我忘记在这里添加库会怎样?它只是被排除在
Component-preload.js
之外并以非优化方式加载还是存在更严重的缺点?
是的,为了从性能优化中受益,您必须保持
manifest.json
部分 /sap.ui5/dependencies/libs
始终与 UI5 库*(包括自定义库)同步,这可以从应用程序代码中识别 and如果 lib 来自框架,则在 API Reference 中可见。 IE。不仅是"sap.ui.core"
和"sap.m"
,而且,例如,"sap.ui.table"
如果其中一个视图包含sap.ui.table.Table
.
如果您有不需要在应用程序启动时立即预加载但应该按需加载的库,您可以将
"lazy": true
分配给这些库,例如:
"libs": {
"sap.ui.core": {},
"sap.m": {},
"sap.ui.comp": {
"lazy": true
}
}
但是
"lazy": true
纯粹是信息性的。在应用程序中,此类库应在使用前显式加载:
// Core required from "sap/ui/core/Core"
await Core.loadLibrary("sap.ui.comp",/*async:*/true);
有关
loadLibrary
的更多信息:https://sdk.openui5.org/api/sap.ui.core.Core#methods/loadLibrary
* 在 UI5 的上下文中,“库”是控件、元素、类型、接口等的命名束
可以在以下位置找到此类库的列表:
将单个模块(例如
sap/ui/Device
)添加到 /sap.ui5/dependencies/libs
部分将不起作用。要查看模块属于哪个库,请检查 API 参考中模块命名空间页面中的“库”信息。
使用 UI5 工具时同样适用。
您的项目所需的所有库必须列在框架配置的
部分:libraries
framework: name: OpenUI5 version: 1.112.0 libraries: - name: sap.ui.core - name: sap.m - name: sap.ui.table - name: ...
component-preload.js
只包含您的应用程序的元素,从不包含任何 UI5 代码。
要回答您的问题,请看一下这个小的 ui5 演示应用程序。
加载时:
"sap.ui5": {
"dependencies": {
"minUI5Version": "1.108.0",
"libs": {
"sap.ui.core": {},
"sap.m": {}
}
}
}
打开 DevTools 并查看网络选项卡。由于
manifest.json
中的库的引用,两个 library-preload.js
都在 before 你的 Component.js.
移除时:
"sap.ui.core": {},
"sap.m": {}
从
manifest.json
再次运行应用程序,然后您可以看到所有 UI5 元素都在您的 component.js
之后一个一个地加载。这只会减慢你的应用程序。