在Breezejs中保存更改时,因为我有多个字段的实体,我想发送到服务器(到Breeze SaveChanges()方法)而不是整个实体,而是只发送实体的一个子集,包含只是已经改变的属性。我知道这就是实体内部的OriginalValuesMap属性所在,它只是为了减少网络流量以提高性能(尽管它可能是一个非常小的改进)。在官方Breezejs' website我找不到任何关于此事的信息,也没有在互联网上找到任何信息。感谢名单
答案 0 :(得分:3)
由于不同的原因,我们遇到了类似的要求。我们的应用程序的一部分与第三方API接口,该第三方API坚持使用put进行增量(无论出于何种原因,放置完整实体都会导致服务器错误或严重的性能问题)。
我们最终推出了一个新的数据服务适配器来解决这个问题,这是一个相对无痛的过程。我们直接从基础AbstractDataServiceAdapter扩展,但您可以在您碰巧使用的任何具体数据服务适配器之上使用自定义_prepareSaveBundle。
您只需注册自定义适配器:
ctor = ->
@name = 'custom_ds'
ctor.prototype = new breeze.AbstractDataServiceAdapter() # or whatever your base is
ctor.prototype._prepareSaveBundle = (saveContext, saveBundle) ->
# Do whatever your base implementation does, but use helper.unwrapChangedValues
# instead of helper.unwrapInstance to get at the delta
breeze.config.registerAdapter 'dataService', ctor
然后将您的实体管理器绑定到使用它的数据服务:
breeze.config.initializeAdapterInstance 'dataService', 'custom_ds'
ds = new breeze.DataService
adapterName: 'custom_ds'
# plus whatever other properties you need to init
manager = new breeze.EntityManager
dataService: ds
# plus whatever other properties you need to init
但如果你只是为了缩减你的有效载荷,那么由于Jay Traband所说的所有原因,这可能不值得麻烦和增加脆弱性。
答案 1 :(得分:1)
我们故意决定不这样做,因为我们觉得性能提升不值得额外的复杂性。我们基于几个考虑做出了这个决定。
我们多年来一直在各种技术中构建RIA应用程序,根据我们的经验,优化保存有效负载很少会提高整体应用程序性能。
但是......请随意将此请求添加到Breeze用户语音。与其他人一样,如果我们的用户认为这很重要,那么我们就会这样做。