- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将定期将一组基于文本的数据从网页推送到服务器,可能是 JSON。
对于每次推送,数据可能没有改变、部分或全部发生改变。为了减少必须通过网络发送的数据量,我只想发送每次推送中更改的差异。
您是否知道任何预制解决方案/工具/库可以:
此外,这是否是解决这个特定问题的最佳方法? 是否有更好的方法来推送文本数据 block ?
编辑:一些说明:
^ 这就是您在随机共享主机上所期望的。我说的是你的好 friend PHP、Python、PERL、Ruby,这些 fullas。 或者,可以轻松安装在随机共享主机上的东西。
最佳答案
这也是我一直在努力解决的问题。如果其他人提供比我更好的答案,我会非常感兴趣,但目前......
首先,有 http://www.xn--schler-dya.net/blog/2008/01/15/diffing_json_objects/
我个人还无法让这个库正常工作,但您的情况可能会有所不同。
另一种选择是不尝试使用 DIFF 算法来解决问题。这是非常低效的,并且根据问题的不同,即使您最终重复自己,您也可能仅发送整个数据 block 就可以获得更好的性能指标。这主要适用于非常小的数据 block 。显然,随着需要传输的数据变大,将会出现一个转折点,但如果没有某种测量,转折点在哪里并不明显。这里的技巧是,数据越大,差异计算所需的时间也就越长。转折点仅由每种方法的增长率形成的两条线的交点决定,这两条线都将是线性的或更糟,具体取决于您的 diff 的实现方式。在最坏的情况下,您可能会看到中间有一个孤岛,其中 diff 获得了更好的性能,但随后再次交叉回来以获得更大的数据集,并且只需通过网络发送它就会再次变得更好。
在尝试 diff 之前,下一站是将数据访问包装在“get”、“set”和“delete”方法中,以跟踪所做的更改。您通过线路发送的数据本质上是这些方法使用情况的顺序日志,您可以在每次成功传输时从客户端刷新该日志。在服务器端,您可以将此日志应用于服务器端数据,并使用服务器端类似的数据访问方法。这是比 diff 更轻的解决方案,不需要太多的处理能力。
最后,如果您要进行比较,我能想到的最有效的方法是您可以将数据集分解为离散的“ block ”,每个 block 都有一个唯一的 ID。然后,当您运行差异时,差异的过程正好处于“ block ”级别。也就是说,您唯一要做的比较就是 ID 与 ID 之间的比较。如果你改变了一个 block ,给它一个新的 id。您能够负担得起的 diff 算法越多,运行所需的时间就越少。
或者,您可以简单地运行 diff 来检查特定对象是否已“更改”,而不是在更改时分配新的 ID,一旦检测到更改就停止,然后简单地将该 block 标记为要重新更改完整发送,以更新服务器端具有相同 ID 的 block 。如果您有某种可以用于快速建立相等性的 block 的快速哈希算法,那么这可能会变得更加有效。
如果 block 的顺序并不重要,或者如果您可以将序列存储为 block 本身的属性,而不是根据 block 的物理序列进行建模,那么您甚至可以通过 ID 为 block 设置关键字。然后发现差异只需列出对象 A 的键,然后在对象 B 上查找它们,然后反之亦然。这比“真正的” diff 算法更容易实现,它具有 O(a+b) 性能,(我认为)比真正的 diff 算法的最坏情况更好,如果你正在尝试自己实现它,或者得到一个糟糕的实现。
关于javascript - 如何将数据(可能是 JSON)的差异推送到服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/584338/
谁能解释一下 Server.MapPath(".")、Server.MapPath("~")、Server.MapPath(@"之间的区别\") 和 Server.MapPath("/")? 最佳答案
我不知道,为什么我们要使用 Server.UrlEncode() & Server.UrlDecode()?!在 QueryString 中我们看到 URL 中的任何内容,那么为什么我们要对它们进行编
我已经通过 WHM 在我的一个域上安装了 ssl 证书。网站正在使用 https://xyz.com . 但是它不适用于 https://www.xyz.com .我已经检查了证书,它也适用于 www
我已经使用 WMI 检测操作系统上是否存在防病毒软件,itz 正常工作并通过使用命名空间向我显示防病毒信息,例如 win xp 和 window7 上的名称和实例 ID:\root\SecurityC
我们有 hive 0.10 版本,我们想知道是否应该使用 Hive Server 1 或 Hive Server2。另一个问题是连接到在端口 10000 上运行的 Hive 服务器,使用 3rd 方工
我想在 C++ 中使用 Windows Server API 设置一个 HTTPS 服务器,我使用了示例代码,它在 HTTP 上工作正常,但我就是不能让它在 HTTPS 上工作。 (我不想要客户端 S
我写了一个非常基本的类来发送电子邮件。我用 smtp 服务器对其进行了测试,它工作正常,但是当我尝试使用我公司的交换服务器时,它给出了这个异常: SMTP 服务器需要安全连接或客户端未通过身份验证。服
我的应用程序包含一个“网关”DataSnap REST 服务器,它是所有客户端的第一个访问点。根据客户端在请求中传递的用户名(基本身份验证),请求需要重定向到另一个 DataSnap 服务器。我的问题
我有一个 Tomcat 服务器和一个 Glassfish4 服务器。我的 Servlet 在 Tomcat 服务器上启动得很好,但在 Glassfish4 服务器上给我一个“HTTP Status 4
我在 vmware 上创建了一个 ubuntu 服务器。我用它作为文件服务器。如果我通过托管虚拟机的计算机进行连接,则可以访问它。我无法从同一网络上的其他计算机执行此操作。提前致谢! 最佳答案 首先确
如何重启 Rails 服务器?我从 开始 rails server -d 所以服务器是分离的 我知道的唯一方法就是去做ps 辅助 | grep rails 并 kill -9关于过程#但是像这样杀死进
我实际上正在尝试找到编写一个简单的 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的服务器。我只关心XMPP的核心功能(状态、消息传递、群组消息传递)。目前还在学习 XMPP 协议(proto
我实际上正在尝试找到编写简单 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的方法。我只关心 XMPP 的核心功能(统计、消息、组消息)。目前也在学习 XMPP 协议(protocol),所以
我们正在尝试从 Java JAX-RS 适配器访问 SOAP 1.1 Web 服务。 我们正在使用从 WSDL 生成的 SOAP 客户端。 但是当解码 SOAP 故障时,我们得到以下异常: ... C
目前,我和许多其他人正在多个平台(Windows、OS X 和可能的 Linux)上使用 Python HTTP 服务器。我们正在使用 Python HTTP 服务器来测试 JavaScript 游戏
我有一个连续运行的服务器程序(C#/.NET 2.0 on Linux with mono),我想从 PHP 脚本连接到它以在网站上显示状态信息。 目的是创建一个(某种)实时浏览器游戏(无 Flash
所以我有一个单页客户端应用程序。 正常流程: 应用程序 -> OAuth2 服务器 -> 应用程序 我们有自己的 OAuth2 服务器,因此人们可以登录应用程序并获取与用户实体关联的 access_t
我们刚刚将测试 Web 服务器从 Server 2008 升级到 Server 2012 R2。我们有一个部署我们网站的批处理脚本。当它将站点推送到服务器时,它现在失败了。奇怪的是,我可以使用相同的发
建议一些加载SpagoBI服务器的方法,我尝试了所有方法来解析spagobi服务器。在 Catalina 中,错误是 - * SEVERE: Unable to process Jar entry [
当我们点击应用程序服务器(apache tomcat)时,它会创建一个线程来处理我们的请求并与 tomcat 连接,建立连接,tomcat 创建另一个线程来处理请求并将其传递给连接,连接线程将其传递给
我是一名优秀的程序员,十分优秀!