1

在应用程序开发人员的最佳实践中,仅加载您真正需要的部分是这样写的:

使您的库依赖关系保持最新
库预加载文件、库样式和文本翻译会为您在应用程序描述符或 OpenUI5 引导程序中定义的每个库加载。始终在清单中定义库并删除您不打算在代码中使用的所有库。

例如:

"sap.ui5": {
    "dependencies": {
        "minUI5Version": "1.85.0",
        "libs": {
            "sap.ui.core": {},
            "sap.m": {},
            "sap.ui.layout": {}
        }
    }
    ...
}

我是否理解正确,libs我必须添加所有出现在sap.ui.define([…])UI5-app 的任何控制器中的库?如果我忘记在此处添加库会怎样?它只Component-preload.js是以非优化方式排除在外,还是有更严重的缺点?

4

2 回答 2

3

是的,为了从性能优化中受益,您必须根据应用程序中使用的 UI5 库*/sap.ui5/dependencies/libs使该部分manifest.json始终保持最新状态。例如,如果您的应用程序使用."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 ); // Load this heavy-weight lib lazily

*在 UI5 的上下文中,“库”是控件、元素、类型、接口等的命名包。
此类库的列表可以在以下位置找到:

将单个模块(例如sap.ui.Device属于"sap.ui.core")添加到该/sap.ui5/dependencies/libs部分将不起作用。要查看命名空间属于哪个库,请查看 API 参考中的“库”信息。

UI5 sap.ui.Device API 参考头信息截图


使用 UI5 工具时也是如此。

您的项目所需的所有库必须在libraries框架配置部分列出:

framework:
  name: OpenUI5
  version: 1.82.0
  libraries:
    - name: sap.ui.core
    - name: sap.m
    - name: sap.ui.table
于 2020-12-16T13:09:46.560 回答
1

component-preload.js唯一包含您的应用程序的元素,从不包含任何 UI5 代码。

要回答您的问题,请查看这个小型ui5 演示应用程序

加载时:

"sap.ui5": {
    "dependencies": {
      "minUI5Version": "1.81.2",
      "libs": {
        "sap.ui.core": {},
        "sap.m": {}
      }
    },

打开 DevTools 并查看 Network 选项卡。由于 中的库引用manifest.json,两者都在您的 Component.js之前library-preload.js加载。

当您删除:

 "sap.ui.core": {},
 "sap.m": {} 

再次manifest.json运行应用程序,然后您可以看到所有 UI5 元素都您的component.js. 这只会减慢您的应用程序的速度。

于 2020-12-15T20:50:57.647 回答