将JavaScript中的大字符串与散列进行比较

use*_*342 11 javascript string hash

我有一个带有textarea的表单,可以包含使用众多第三方富文本编辑器之一编辑的大量内容(例如,博客文章).我正在尝试实现类似自动保存功能的东西,如果它被更改,它应该通过ajax提交内容.但是,我必须解决这样一个事实:我作为选项的一些编辑器不支持"isdirty"标志,或者"onchange"事件,我可以用它来查看自上次保存以来内容是否已更改.

因此,作为一种解决方法,我想要做的是将内容的副本保存在变量中(让我们称之为lastSaveContent),从最后一次保存开始,并在"自动保存"功能触发时将其与当前文本进行比较(在计时器上)看它是否不同.但是,我担心可能会占用大量文档的内存量.

在lastSaveContent变量中存储某种散列而不是整个字符串,然后比较散列值会更有效吗?如果是这样,你能推荐一个好的javascript库/ jquery插件,为这个要求实现适当的哈希吗?

Mat*_*att 21

简而言之,您最好只存储和比较两个字符串.


计算适当的哈希并不便宜.例如,查看伪代码或用于计算字符串的MD5哈希的实际JavaScript实现.此外,所有正确的哈希实现都需要枚举字符串的字符.

此外,在现代计算的背景下,一个字符串必须是真的,真的很长的比较它与另一个字符串之前是缓慢的.你在这里做的实际上是微观优化.内存不会成为问题,CPU也不会循环比较两个字符串.

与所有优化案例一样:在解决之前检查确实是一个问题.在我做的快速测试中,计算和比较2个MD5总和需要382ms.直接比较两个字符串需要0ms.这是使用10000字长的字符串.见http://jsfiddle.net/DjM8S.

如果你真的认为这是一个问题,我也会强烈考虑使用穷人比较; 并且只是比较2个字符串的长度,看它们是否已经改变,而不是实际的字符串比较.

..

  • MD5'字符串,然后将其与"之前的"md5总和进行比较,需要382ms.基本字符串比较需要0ms; 这是使用一个长约10000字的字符串.(http://www.jsfiddle.net/DjM8S/) (2认同)