Сравнение больших строк в JavaScript с хешем

У меня есть форма с текстовой областью, которая может содержать большой объем содержания (скажите, статьи для блога), отредактированное использование одного из многих сторонних визуальных редакторов. Я пытаюсь реализовать что-то как функция автосохранения, которая должна отправить содержание через ajax, если это изменяется. Однако я должен работать вокруг того, что некоторые редакторы, которых я имею как опции, не поддерживают флаг "isdirty" или "onchange" событие, которое я могу использовать, чтобы видеть, изменилось ли содержание начиная с последнего сохранения.

Так, как обходное решение, что я хотел бы сделать, содержание копия содержания в переменной (позволяют нам назвать это lastSaveContent), с последнего сохранения, и сравнивают его с текущим текстом, когда "автосохранение" функционирует огни (на таймере), чтобы видеть, отличается ли это. Однако я волнуюсь по поводу того, сколько памяти, которая могла завязать дружбу с очень большими документами.

Было бы более эффективно сохранить своего рода хеш в lastSaveContent переменной вместо всей строки, и затем сравнить значения хэш-функции? Если так, можно ли рекомендовать хороший плагин библиотеки/jQuery JavaScript, который реализует соответствующий хеш для этого требования?

11
задан user4815162342 23 March 2010 в 18:40
поделиться

2 ответа

Короче говоря, лучше просто сохранить и сравнить две строки.


Вычисление правильного хэша недешево . Например, посмотрите псевдокод или фактическую реализацию JavaScript для вычисления хэша MD5 строки. Более того, все правильные реализации хеширования в любом случае потребуют перечисления символов строки.

Кроме того, в контексте современных вычислений строка должна быть действительно , действительно задолго до того, как ее сравнение с другой строкой будет медленным. То, что вы здесь делаете, по сути, является микрооптимизацией. Не будет проблем с памятью, как и циклами ЦП для сравнения двух строк.

Как и во всех случаях оптимизации: проверьте , что это на самом деле проблема, прежде чем решать ее. В быстром тесте, который я провел, вычисление и сравнение двух сумм MD5 заняло 382 мс. Прямое сравнение двух строк заняло 0 мс. Здесь использовалась строка длиной 10000 слов. См. http://jsfiddle.net/DjM8S .

Если вы действительно видите в этом проблему, я также настоятельно рекомендую использовать сравнение бедняков; и просто сравнивая длину двух строк, чтобы увидеть, изменились они или нет, а не фактические сравнения строк.

. .

21
ответ дан 3 December 2019 в 03:51
поделиться

Хэш MD5 часто используется для проверки целостности файла или документа; он должен работать для ваших целей. Вот хорошая статья о генерации md5 хэша на Javascript.

4
ответ дан 3 December 2019 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: