如何处理 bootstrap 的 data-sap-ui-libs 与清单的 sap.ui5/dependencies/libs?

Pie*_*ter 5 sapui5

我通常在 下的清单中声明应用程序依赖的所有标准库sap.ui5/dependencies/libs

现在我应该在 bootstrap 参数中放入什么data-sap-ui-libs,相同的库?如果我少放/多放会有什么影响data-sap-ui-libs?它们有何不同?

附言。我在 SAP 的文档中找不到这一点,但请证明我错了。:-)

Bog*_*ann 3

如果我少放/多放会有什么影响data-sap-ui-libs?它们有何不同?

我的建议是完全data-sap-ui-libs删除index.html特别$metadata是如果应用程序正在处理 OData,则尽早检索文档非常重要。请参阅下面的示例:

index.html

<head>
  <script id="sap-ui-bootstrap"
    src="https://ui5.sap.com/<version>/resources/sap-ui-core.js"
    data-sap-ui-theme="sap_horizon"
    data-sap-ui-oninit="module:sap/ui/core/ComponentSupport"
    data-sap-ui-async="true"
    data-sap-ui-compatversion="edge"
    data-sap-ui-excludejquerycompat="true"
    data-sap-ui-resourceroots='{ "demo": "./" }'
    data-sap-ui-xx-waitfortheme="init"
  ></script><!-- No data-sap-ui-lib -->
</head>
<body id="content" class="sapUiBody">
  <div style="height: 100%"
    data-sap-ui-component
    data-name="demo" 
    data-height="100%"
  ></div>
</body>
Run Code Online (Sandbox Code Playgroud)

manifest.json

{
  "sap.app": {
    "dataSources": {
      "myODataSource": {
        "uri": "/odata_org/V2/Northwind/Northwind.svc/",
        "type": "OData",
        "settings": {
          "odataVersion": "2.0",
          "localUri": "model/metadata.xml",
          "annotations": [
            "annotation0"
          ]
        }
      },
      "annotation0": {
        "type": "ODataAnnotation",
        "uri": "annotation/annotation0.xml",
        "settings": {
          "localUri": "annotation/annotation0.xml"
        }
      }
    },
    "...": "..."
  },
  "sap.ui5": {
    "dependencies": {
      "minUI5Version": "1.108.4",
      "libs": {
        "sap.ui.core": {},
        "sap.m": {},
        "sap.ui.table": {},
        "sap.ui.unified": {}
      }
    },
    "models": {
      "": {
        "dataSource": "myODataSource",
        "settings": {
          "preliminaryContext": true,
          "tokenHandling": false
        },
        "preload": true
      }
    },
    "...": "..."
  },
  "...": "..."
}
Run Code Online (Sandbox Code Playgroud)

结果

使用 OData 数据引导 OpenUI5

正如您所看到的,$metadata文档是与控件库并行获取的。$batch这确保了一旦加载库就可以立即请求实体(例如在 中)。如果在 中声明库data-sap-ui-libs,它们将首先加载,然后$metadata然后是实体,这会产生不必要的瓶颈。

但即使不考虑 OData,我注意到当从data-sap-ui-libs. 一般来说,除了记录的绩效指南之外,无论人们(包括我)说什么,尝试不同的方法并进行绩效衡量。


长话短说

  • 仅在以下情况下使用data-sap-ui-libs
    1. 该应用程序Component.js根本没有。
    2. 在创建组件之前sap.ui.core访问除库之外的模块(例如,实例化为的 shell )sap.m.ShellComponentContainer
  • 否则,data-sap-ui-libs完全删除并仅维护/sap.ui5/dependencies/libs-特别是如果应用程序应该从应用程序容器启动,例如 SAP Fiori launchpad (FLP),它会index.html完全跳过加载。

另请参阅如果 UI5 清单中未更新库预加载文件/库依赖项会发生什么?