Latency Compehsation



Latency Compehsation


如果这个数据是在本地的话,那么你的操作其实也是本地的。这个是什么意思呢?这个你要直观的理解,就是叫延迟补偿。


0.png


延迟补偿是什么意思呢?


就是时候,以往我们做一个操作。比如说我们删除个东西,在ajax的时代,实际上client或者说能力是比较小的。当你向做一件事,比如删除,就必须在server端做,因为server端有数据;client端没有数据。而且client端的数据,只是一个静态的送过来的object。而且你删了没用,你自己删了,server端还是有,你下次刷新它又回来了。


所以呢!在ajax那个时候,或者更早LAMP的时候,你做server的操作,实际上都要去server端完成。把你要请求的东西给server,server端收到了以后,才根据逻辑,如果你有权利的话,我才在这个server端把数据删了。然后告诉你删除成功,这个时候,你才能够把它在你的前端数据库里去掉,这样才能保证数据一致;否则的话,这个程序一定会错。

Meteor时代不需要这样,因为缺点很明显。刚才我们说这个过程:点一下,去server,server说可以删了,然后再回来告诉你成功。这个要等待。如果网速不快点的时候,你就会发现点一下东西半天不反应。在Meteor这个时代,这个都是历史了。eteor时代,如果你删除一个东西,或者你增加一个东西,实际上你需要做的就是在你本地数据库里增加一条记录。


1.png


没说错,它不需要你去给server增加。那么问题来了,你本地添加了,我怎么告诉server呢?否则数据就不同步了。这个时候,有DDP呢!我们这里可以马上加一条记录,仿造一下。我们在浏览器控制台使用这个命令,在todos里面增加一条数据。


2.png


添加之后,它马上告诉我插入成功了。这个是在前端浏览器里面做的???,马上在界面中就提现出了我们刚插入的数据。


3.png


实时的就会出来这么一个东西。
然后在控制台马上就会出现一个东西告诉我们做了哪些操作。


4.png


这里就是我们在todos里面insert了一条数据。这个就是我们新增的数据内容。


5.png


这些代码,不是我们写的,meteor会自动的告诉server本地数据库出现了变化。
server也会马上响应,增加一条数据,下行过来。


6.png


然后这里的数字就又增加了一个。


7.png


这个就叫做延迟补偿。因为,我加的时候是在前端本地加的,这个是不需要等待的,因为代码都是在本地执行的。我们在控制台手动添加数据,在页面上同步的就显示出来了,没有任何延迟等待。


8.png


因为它是属于“先斩后奏型”。我先添加上,然后再传给server。
那么,可能你还有疑问。如果你根本没有权利向数据库中添加数据,这是你强行在本地数据库中添加了数据,怎么办?server端怎么拒绝它?这里有一个很重要的允许和拒绝的逻辑。当然,这个逻辑里面我们的代码里没有。


9.png


因为这个程序太简单了,所以都没有提到。实际上是要在server端有一个这样的逻辑的。也就是说,当前端有一个数据库修改的请求到这个server端的时候。Server端就要判断这个操作你是不是有权利做的。如果是有权利的,就像刚才一样是没问题的;如果发现这个是没有权利的,比如你去改一个你没有权利做的一个操作的时候,比如你修改别人的list,那么这个时候server就会拒绝这个事情。那么拒绝的结果就是会发出一个拒绝的消息给这个前端,前端就会把你刚才添加的这个东西给你删除掉。所以,其效果就是,你加了一个东西,它瞬时就出现了效果,但是又瞬时就消失掉了,就退回到你没有加的这个状态。



【本文由麦子学院独家原创,转载请注明出处并保留原文链接】

logo
? 2012-2016 葡京国际首页 www.ybxiongdi.com
蜀ICP备13014270号-4 Version 5.0.0 release20160127

秋招大聚惠,豪华礼包你领了吗?

客服热线 400-862-8862

回到顶部