SAPUI5 每次调用时都会加载库jQuery.sap.require("someLibrary")
吗?例如,如果我在应用程序的多个模块中调用上述语句,是否也会多次加载“someLibrary”?
4 回答
如果有人仍然考虑使用jQuery.sap.require
,请注意它只发送应该避免的同步 XHR。
使用
jQuery.sap.require
是同步的,被认为是“不好的做法”,因为web 超文本应用技术工作组不推荐使用syncXHR。(来源:模块和依赖项)
相反,当前的最佳实践是使用sap.ui.define
or.require
进行异步模块加载:
<!-- Enable asynchronous module loading in index.html (available since 1.58.2) -->
<script id="sap-ui-bootstrap" src="..." data-sap-ui-async="true" ...>
sap.ui.define([ // or .require
// modules to load
], function(/* modules available once loaded */) {
// ...
});
资料来源:Arnd vom Hofe 的异步应用程序
与 相同jQuery.sap.require
,API也仅根据其内部状态sap.ui.require([/*...*/])
获取模块一次。
有关更多信息,请查看模块和依赖项下的主题。
Sync XHR 不仅被 Web 平台普遍弃用,而且也将逐渐被 UI5 用一组新的 API 取代。
资料来源:Peter Muessig 的UI5 Evolution
因此,jQuery.sap.require
并且jQuery.sap.declare
现在已弃用。
该库仅加载一次。您可以在 SDK https://sapui5.hana.ondemand.com/sdk/#docs/guide/ModularizationConcept.html中找到此信息
模块加载
如前所述,通过调用函数 jQuery.sap.require 来加载模块,并使用所需模块的名称。然后框架检查命名模块是否已经加载。如果是这样,该函数简单地返回。否则它会尝试同步加载和执行模块。如果这两个步骤中的任何一个失败,就会抛出异常,从而中断调用模块的执行。
库加载一次。这可以在 chrome 开发人员工具的网络选项卡中看到。
还要在此处查看 cevou 指出的文档:
当您使用某个库调用此函数时,它会检查给定库是否已加载或未使用关联数组。如果库已加载,则返回null
. 如果未加载库,则使用 sjax 调用加载库,并在 sjax 调用成功后,将库名称设置为关联数组的键。