Breeze.js模型库

时间:2014-05-22 14:36:51

标签: knockout.js breeze

使用big breeze.js实体列表时遇到内存问题。 我注意到这是因为在淘汰模型库中使用此代码:

ko.extenders.intercept = function(target, interceptorOptions) {
        var instance = interceptorOptions.instance;
        var property = interceptorOptions.property;

        // create a computed observable to intercept writes to our observable
        var result;
        if (target.splice) {
            result = ko.computed({
                read: target  //always return the original observables value
            });
        } else {
            result = ko.computed({
                read: target,  //always return the original observables value
                write: function(newValue) {
                    instance._$interceptor(property, newValue, target);
                    return instance;
                }
            });
        }
        //return the new computed observable
        return result;
    };

你有任何建议要做“实例._ $ interceptor(property,newValue,target);”没有ko.computed,它消耗了大量的内存,如果我评论Ko.computed内存减少分配。

提前致谢...

1 个答案:

答案 0 :(得分:0)

不确定在哪里责备这里。

对我来说1400个实体听起来不是很多。别的东西似乎错了。

我粗略的算术告诉我,对于计算的可观察量,您需要花费大约100KB的PER ENTITY成本,对于常规的可观察量,每个成本需要32KB。这两个数字都是淫秽的。你的Product类型也必须非常广泛,是吗?我敢打赌,您的Product类型包含大量属性...其中许多属性可能与您的客户端应用无关。

Breeze做什么以及为什么?

使用Knockout需要为每个实体的每个属性构建一个可观察的(计算的或其他的),理由是你可能绑定到它们中的任何一个。除了可观察性之外,我们还使用计算来执行其他Breeze功能(例如,验证,导航连线)。

我确实发现自己想知道为什么计算的可观察量比普通的可观察量贵3倍。是Knockout的价格吗? Breeze是否以某种方式增加了这笔费用?我不知道。

我认为Breeze可能会将自己的事件处理程序附加到常规的可观察属性,而不是使用计算机。我不知道这是否会导致时序错误或功能丧失(例如,我们在设置期间对数据进行的某些转换)。一旦你增加了我们的处理程序的重量,我不知道它是否会节省空间。

我怀疑Breeze架构师在使用计算机之前仔细考虑了这些问题,并尽力将这些计算中的Breeze代码的权重降至最低。

我可以告诉你,我们不太可能很快看到这个。如果你看到自己看起来特别令人发指的东西,请告诉我们,我们会跟随你的。

怎么办?

我想我会更仔细地查看我的Product实体,看看我是否可以大大削减它...至少对于这些用例...并考虑如何管理它们更少在任何时候都在缓存中(您将考虑如何定期从缓存中逐出产品)。