Comparing large strings in JavaScript with a hash

前端 未结 3 1557
小蘑菇
小蘑菇 2021-02-05 17:26

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

相关标签:
3条回答
  • 2021-02-05 18:03

    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.

    ..

    0 讨论(0)
  • 2021-02-05 18:03

    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.

    0 讨论(0)
  • 2021-02-05 18:17

    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!

    0 讨论(0)
提交回复
热议问题