Skip to content Skip to sidebar Skip to footer

Comparing Large Strings In Javascript With A Hash

I have a form with a textarea that can contain large amounts of content (say, articles for a blog) edited using one of a number of third party rich text editors. I'm trying to impl

Solution 1:

In short, you're better off just storing and comparing the two strings.


Computing a proper hash is not cheap. For example, check out the pseudo code or an actual JavaScript implementation for computing the MD5 hash of a string. Furthermore, all proper hash implementations will require enumerating the characters of the string anyway.

Furthermore, in the context of modern computing, a string has to be really, really long before comparing it against another string is slow. What you're doing here is effectively a micro-optimization. Memory won't be an issue, nor will the CPU cycles to compare the two strings.

As with all cases of optimizing: check that this is actually a problem before you solve it. In a quick test I did, computing and comparing 2 MD5 sums took 382ms. Comparing the two strings directly took 0ms. This was using a string that was 10000 words long. See http://jsfiddle.net/DjM8S.

If you really see this as an issue, I would also strongly consider using a poor-mans comparison; and just comparing the length of the 2 strings, to see if they have changed or not, rather than actual string comparisons.

..

Solution 2:

An MD5 hash is often used to verify the integrity of a file or document; it should work for your purposes. Here's a good article on generating an MD5 hash in Javascript.

Solution 3:

I made a JSperf rev that might be useful here for performance measuring. Please add different revisions and different types of checks to the ones I made!

http://jsperf.com/long-string-comparison/2

I found two major results

  • When strings are identical performance is murdered; from ~9000000 ops/s to ~250 ops/sec (chrome)
  • The 64bit version of IE9 is much slower on my PC, results from the same tests:

    +------------+------------+
    | IE9 64bit  |  IE9 32bit |
    +------------+------------+
    | 4,270,414  | 8,667,472  |
    | 2,270,234  | 8,682,461  |
    +------------+------------+

Sadly, jsperf logged both results as simply "IE 9".

Even a precursory look at JS MD5 performance tells me that it is very, very slow (at least for large strings, see http://jsperf.com/md5-shootout/18 - peaks at 70 ops/sec). I would want to go as far as to try AJAXing the hash calculation or the comparison to the backend but I don't have time to test, sorry!

Post a Comment for "Comparing Large Strings In Javascript With A Hash"