为什么SAPUI5会多次加载类似的片段?

Mah*_*ari 5 browser performance caching sapui5

我有一个XML片段,并在XML视图的多个地方使用它。

<IconTabFilter text="ABC" key="1" icon="sap-icon://alphabetical-order">
    <content>
        <Table id="table1" width="auto" items="{path:'/ContactSet',parameters:{expand:'BusinessAddress,HomeAddress,OtherAddress,Photo'},filters:[{path:'Surname',operator:'StartsWith',value1:'A'},{path:'Surname',operator:'StartsWith',value1:'B'},{path:'Surname',operator:'StartsWith',value1:'C'}]}" noDataText=" {worklistView>/tableNoDataText}" busyIndicatorDelay="{worklistView>/tableBusyDelay}" growing="true" growingScrollToLoad="true" updateFinished="onUpdateFinished">
            <headerToolbar>
                <core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesHeader" type="XML"/>
            </headerToolbar>
            <columns>
                <core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesColumns" type="XML"/>
            </columns>
            <items>
                <core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesRows" type="XML"/>
            </items>
        </Table>
    </content>
</IconTabFilter>
<IconTabSeparator icon="sap-icon://process"/>
<IconTabFilter text="DEF" key="2" icon="sap-icon://alphabetical-order">
    <content>
        <Table id="table2" width="auto" items="{path:'/ContactSet',parameters:{expand:'BusinessAddress,HomeAddress,OtherAddress,Photo'},filters:[{path:'Surname',operator:'StartsWith',value1:'D'},{path:'Surname',operator:'StartsWith',value1:'E'},{path:'Surname',operator:'StartsWith',value1:'F'}]}" noDataText="{worklistView>/tableNoDataText}" busyIndicatorDelay="{worklistView>/tableBusyDelay}" growing="true" growingScrollToLoad="true" updateFinished="onUpdateFinished">
            <headerToolbar>
                <core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesHeader" type="XML"/>
            </headerToolbar>
            <columns>
                <core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesColumns" type="XML"/>
            </columns>
            <items>
                <core:Fragment fragmentName="de.cimt.cimply.AddressBook.view.worklist.tablesRows" type="XML"/>
            </items>
        </Table>
    </content>
</IconTabFilter>
Run Code Online (Sandbox Code Playgroud)

但是视图加载时间太长,尤其是在WEBIDE中。

原因是它多次加载了类似的片段文件。这是一个证据:

显示SAPUI5如何加载xml文件

问题是如何改善性能?

我不想重复代码,我需要将代码的那一部分放在一个片段中,但是我希望我的浏览器不会多次加载相同的文件。

Bog*_*ann 3

在这种情况下,无需更改您的代码。SAP Web IDE / SCP 利用开箱即用的App Cache Buster概念,只要这些资源之前未被更改,它就会从浏览器缓存中获取应用程序资源(例如片段)。

请参阅下面的示例屏幕截图:

给定

  • 代码:

    <core:Fragment fragmentName="demo.view.fragment.MyFragment" type="XML" />
    <core:Fragment fragmentName="demo.view.fragment.MyFragment" type="XML" />
    <core:Fragment fragmentName="demo.view.fragment.MyFragment" type="XML" />
    <core:Fragment fragmentName="demo.view.fragment.MyFragment" type="XML" />
    <core:Fragment fragmentName="demo.view.fragment.MyFragment" type="XML" />
    <core:Fragment fragmentName="demo.view.fragment.MyFragment" type="XML" />
    
    Run Code Online (Sandbox Code Playgroud)
  • sap-ui-appCacheBuster=...Web IDE 在应用程序启动时自动附加的URL 属性(描述sap-ui-cachebuster-info.json所在位置)
  • 如果开发工具已打开:Disable cache 未选中<-- 可能在您的情况下仍处于激活状态

结果

从缓存加载 SAPUI5 应用程序资源

正如您所看到的,片段(和其他资源)是从磁盘缓存加载的,而不是一次又一次地重新获取它们。

此外,如果应用程序是针对最终生产环境进行捆绑的,那么这些片段甚至不会被多次请求,因为它们通常已经包含在捆绑文件中(例如Component-preload.js)。