Google drive api 谷歌实时对象池

Google drive api 谷歌实时对象池,google-drive-api,pool,google-drive-realtime-api,Google Drive Api,Pool,Google Drive Realtime Api,这个问题对SO来说有点“元”,但似乎没有更好的地方可以问它 ,实时协作对象永远不会从模型中删除。因此,在可能的情况下将对象池化是有意义的,而不是真正地删除它们并随后创建新的对象,从而防止文件大小和开销的不必要增加 问题是:在“撤消”场景中,这意味着将删除的对象从垃圾池中拉出。但是“撤消”只适用于本地用户的操作,如果“已删除”对象已被其他用户声明,我看不出实时引擎如何处理 我的问题是,我是否遗漏了一些东西或错误的想法,和/或是否有一种替代每个用户池的方法 (我还想到,作为一项功能,API可以处理已

这个问题对SO来说有点“元”,但似乎没有更好的地方可以问它

,实时协作对象永远不会从模型中删除。因此,在可能的情况下将对象池化是有意义的,而不是真正地删除它们并随后创建新的对象,从而防止文件大小和开销的不必要增加

问题是:在“撤消”场景中,这意味着将删除的对象从垃圾池中拉出。但是“撤消”只适用于本地用户的操作,如果“已删除”对象已被其他用户声明,我看不出实时引擎如何处理

我的问题是,我是否遗漏了一些东西或错误的想法,和/或是否有一种替代每个用户池的方法


(我还想到,作为一项功能,API可以处理已删除对象的池,自动将文件膨胀降至最低。)

我认为您必须非常小心以您描述的方式重用对象。这真的很难做到正确。你真的遇到尺寸问题了吗?一般来说,只要你不经常创建和扔掉对象,那就没什么大不了的

当协作对象不用于释放空间时,可以删除其内容。一般来说,这就足够了


(请注意,是的,API理论上可以自动处理此对象清理。正确处理诸如撤消之类的功能是一个非常棘手的问题。如果它成为人们真正关心的问题,它可能会成为未来的功能。)

补充Cheryl的答案,我认为这是一件特别具有挑战性的事情(实际上,不可能)是从游泳池中拉出一个物体:

假设您有一个对象池,其中(当前)包含一个对象
O1

当客户机需要一个新对象时,它会首先检查池。如果池不是空的,它会从那里提取一个对象(即
O1
对象)并使用它,对吗

现在,考虑两个客户端(A.K.A,编辑器/合作者)同时需要一个新对象的场景。每个客户端将运行前面段落中描述的逻辑。即:两个客户端都将检查池是否为空,并且两个客户端将拉“<代码> O1 < /代码>关闭。 因此,丢失的客户端将“认为”它成功了一段时间。它将从池中抓取一个对象并用它做一些事情。稍后,它将收到一个事件(E),告诉它该对象实际上是由另一个客户端拉的。此时,“丢失”客户端将需要创建另一个对象,并将它对第一个对象所做的任何更改重新应用到第二个对象


由于您不知道(E)事件是否/何时触发,这实际上意味着每个客户端都需要准备好用新的协作对象替换它使用的每个协作对象。这似乎相当困难。更困难的是,您无法从事件处理程序中更改模型(因为这将胜过重做/撤消堆栈)。因此,对(E)事件的实际反应需要在(E)事件处理程序之外进行。因此,在接收(E)事件之间的时间内事件和对模型的修复,您的UI层将无法使用该模型。

ps,我希望您喜欢新文档。如果有不清楚的地方,请告诉我。@CherylSimon既然您问了,索引引用上的deleteMode在文档中看起来像(新的?)函数,但它是一个只读属性…所以当然下一个问题是如何设置它?Woops..您可以将它传递到registerReference,而不是布尔值,但文档不会更新..我们会修复它,谢谢。这是您要找的那种概述吗?驱动器开发人员g+页面是一个很好的位置,或者是新d上的问题跟踪程序ocs的东西:是的,我喜欢它们,但我不好意思说我不知道它们是新的。在过去,realtime/drive/apps文档已经出现了,我们可以说,分散了吗?我一直渴望有一个带有链接的文档概述页面。在这种情况下,很可能在项目的过程中,每个用户都会删除和creating有几百个对象,甚至几千个,其中许多对象本身包含几个对象。我没有注意到任何性能下降,也没有遇到任何大小限制,但在这种情况下,我认为至少值得尝试一个每个用户的池(加上我的ocd团队实际上在对我大喊大叫)。当然欢迎您使用它,但在我看来,这可能是一个过早的优化,更可能用模糊的bug来咬您,而不是实际修复任何东西:)人们遇到麻烦的地方是当您说,当有人拖动屏幕时,用每一个鼠标事件创建一个新的临时协作对象…谢谢,Cheryl,我被说服了。作为未来的证明,我是否至少可以在列表中转储(清空)对象?如果他们无论如何都要留下来,那么能够抓住他们是有意义的,如果是在~0净成本的情况下……那应该是~0成本,所以可能没有伤害。理想情况下,我们会在您亲自尝试之前对问题进行全局修复,但当然没有承诺:)是的,这正是我所期望的问题,因此提出了每个用户池的概念,很可能是用户ID键控映射中的列表。如何确定对象所在的用户池?Riddick方法:保留您杀死的对象。有可能存在歧义吗?例如:一个对象将从复合op中的列表中删除,它要么是本地的,要么不是。如果它是本地的,它将被添加到本地用户池(它是模型的一部分)。我突然想到,究竟是谁删除了某些内容,这可能有点模棱两可。如果是这样的话,我可以用原始的创造者来代替。但是,由于该过程只是清空一个对象,然后将其从一个列表移动到另一个列表,如果我将其视为“删除”对象,为什么会造成更多的麻烦呢?这不是一个理想的解决方案,因为