什么';在UI5中对OData服务中的数据使用JSONModel有什么错?

什么';在UI5中对OData服务中的数据使用JSONModel有什么错?,odata,sapui5,sap-fiori,Odata,Sapui5,Sap Fiori,我必须(与一名队友)开发一个应用程序,该应用程序主要包含一个包含十几个过滤器的表,以及从OData服务加载的行,其中包含大约4000k个条目。由于我们必须经常上传模型而不将更改存储到服务器中,并且我们希望用户立即看到所做更改的结果,因此我们决定在应用程序开始时构建sap.ui.model.json.JSONModel,从sap.ui.model.odata.v2.ODataModel加载数据 我们发现,通过这种方式,应用程序的速度明显快于直接OData绑定方法,我们的技巧使应用程序工作得非常完美

我必须(与一名队友)开发一个应用程序,该应用程序主要包含一个包含十几个过滤器的表,以及从OData服务加载的行,其中包含大约4000k个条目。由于我们必须经常上传模型而不将更改存储到服务器中,并且我们希望用户立即看到所做更改的结果,因此我们决定在应用程序开始时构建
sap.ui.model.json.JSONModel
,从
sap.ui.model.odata.v2.ODataModel
加载数据

我们发现,通过这种方式,应用程序的速度明显快于直接OData绑定方法,我们的技巧使应用程序工作得非常完美

所以,我们的问题是:我们所做的有什么缺点吗?请记住,我们对SAP Fiori world都没有太多经验,在我们的应用程序中,用户不必写入数据或在表中创建新条目,他们只会查看数据,使用一些过滤器、排序,并在过滤表后下载CSV

编辑:“这是只包含mcve的repo的链接,我使用了Northwind OData,直接在ODataModel上执行有问题的操作,而不使用中间JSONModel。关键的操作是一个只显示表中选定项的过滤器:您可以将Northwind OData更改为您想要的任何服务,并看到如果表的行数大幅增加,此操作需要大量时间。 使用的Sap UI5版本:1.84.0

  • 我会重新考虑一次加载40万个条目。这大致相当于应用程序启动时数据加载的10+MB

  • 关于“把戏”

    我们的技巧使应用程序工作得非常完美

    服务器端模型(如
    ODataModel
    )和客户端模型(如
    JSONModel
    )之间的主要区别在于服务器端模型知道后端服务实现的查询规范,因此可以让客户端(UI5)优化运行时行为,而编写更少的代码(通常是声明性的),并且位于客户端功能之上。在我们的例子中,
    ODataModel
    还支持客户端操作模式:

    “模型”:{
    "": {
    “数据源”:“myODataService”,
    “设置”:{
    “defaultOperationMode”:“客户端”
    
    这还将一次加载表的所有条目,而不必使用中间的
    JSONModel
    。排序、筛选等都将在客户端进行。但是:应根据数据量、目标用户、设备和用例选择操作模式

  • 由于
    ODataModel
    甚至支持,因此在处理来自OData服务的数据时,我将这种中间
    JSONModel
    视为纯粹的开销

  • 我会重新考虑一次加载40万个条目。这大致相当于应用程序启动时数据加载的10+MB

  • 关于“把戏”

    我们的技巧使应用程序工作得非常完美

    服务器端模型(如
    ODataModel
    )和客户端模型(如
    JSONModel
    )之间的主要区别在于服务器端模型知道后端服务实现的查询规范,因此可以允许客户端(UI5)优化运行时行为,同时编写更少的代码(通常是声明性的),并且在客户端功能的顶部。在我们的例子中,
    ODataModel
    还支持客户端操作模式:

    “模型”:{
    "": {
    “数据源”:“myODataService”,
    “设置”:{
    “defaultOperationMode”:“客户端”
    
    这还将一次加载表的所有条目,而不必使用中间的
    JSONModel
    。排序、筛选等都将在客户端进行。但是:应根据数据量、目标用户、设备和用例选择操作模式


  • 由于
    ODataModel
    甚至支持,我认为这种中间
    JSONModel
    在处理来自OData服务的数据时是一种纯粹的开销。

    如果你的应用程序速度更快,你有没有想过改进后端?比如正确实现分页(跳过和顶部参数)?@Marc我认为Donax想要实现的是过滤、排序等后的即时响应。这只有在整个数据在客户端可用的情况下才可能实现。也就是说,根本没有往返。但是,正如下面的答案所解释的,在这种情况下,没有必要使用
    JSONModel
    。我唯一要问的是用户是否s真的很愿意在每次应用程序打开时下载40万条条目。是的,Boghyon是对的,我不能从后端接触任何东西。同意用户不应该每次都下载整个数据集,我们还实施了某种预先过滤,以便至少过滤掉大部分无用的EntrieEdit:changed repo链接re在前者中是一个不希望出现的问题,因此如果保存了某些内容,请删除所有内容,如果您的应用程序速度更快,请仅参考新的repo。您是否考虑过改进后端?例如正确实现分页(跳过和顶部参数)?@Marc我认为Donax想要实现的是过滤、排序等后的即时响应。这只有在整个数据在客户端可用的情况下才可能实现。也就是说,根本没有往返。但是,正如下面的答案所解释的,在这种情况下,没有必要使用
    JSONModel
    。我唯一要问的是用户是否他们真的很愿意在每次应用程序打开时下载40万条条目。是的,Boghyon是对的,我不能从后端接触任何内容。同意用户不需要下载entir