Когда быстрое сравнение текстов окупается
Большинство правок после внесения становятся невидимыми. Читать две версии бок о бок долго и ненадёжно: люди то и дело пропускают изменённую цифру в цене, исчезнувшее «не» или переставленную дату.
Diff берёт поиск на себя. Типичные случаи, когда он реально экономит время:
- Проверить, что контрагент поменял в договоре, коммерческом предложении или условиях, прежде чем подписывать.
- Сравнить две выгрузки одного и того же списка (email-адреса, артикулы, ID), чтобы увидеть, какие записи появились или пропали.
- Выяснить, почему два конфигурационных файла или два файла
.envведут себя по-разному. - Сверить отредактированную статью или перевод с исходным черновиком.
Как работает сравнение
Инструмент использует подход на основе наибольшей общей подпоследовательности — то же семейство алгоритмов, что лежит в основе git diff и классического Unix-diff. Он ищет максимально возможный объём текста, общий для обеих версий, оставляет его без изменений, а всё остальное помечает как удалённое из исходного текста или добавленное в новой версии.
Результат пересчитывается прямо во время ввода или вставки, так что можно поправить что-то в любом из полей и сразу увидеть эффект. Удалённые фрагменты показываются красным и зачёркнутыми, добавленные — зелёным, а остальное — обычным текстом моноширинным шрифтом, чтобы выравнивание в коде и таблицах оставалось читаемым.
Счётчик над результатом означает немного разное в каждом режиме:
- В режиме «По строкам» считаются строки:
+4 / −2значит, что добавлены четыре строки и удалены две. Отредактированная строка учитывается один раз как удалённая (старая версия) и один раз как добавленная (новая). - В режиме «По словам» считаются не отдельные слова, а изменённые фрагменты. Переписанная фраза из шести слов, стоящая в одном месте, засчитывается как одно удаление и одно добавление.
Сравнение по строкам и по словам на практике
Режим «По строкам» считает каждую строку неделимой единицей. Это правильная модель для всего, где строка имеет смысл сама по себе: исходный код, строки CSV, лог-файлы, списки имён, настройки YAML или .ini. Режим при этом строгий: пробел в конце строки или табуляция вместо пробелов делают её другой строкой.
Режим «По словам» разбивает текст на слова и знаки препинания и сравнивает уже их. Для обычной прозы он намного удобнее: там целый абзац часто записан одной длинной строкой, и построчное сравнение сообщило бы лишь «этот абзац изменился». В режиме по словам видно, какие именно слова заменены. Он и более снисходителен: различия только в пробелах, например двойной пробел между предложениями, в основном игнорируются.
Хорошая привычка — начать с режима «По строкам», чтобы увидеть, где находятся изменения, а затем переключиться на «По словам» и прочитать, что именно поменялось внутри длинной строки.
Как получить чистый и понятный результат
Большинство запутанных диффов возникает из-за шума форматирования, а не из-за реальных правок. Перед сравнением стоит проверить несколько вещей:
- Переносы строк. В тексте, скопированном из PDF или письма, часто встречаются жёсткие переносы посреди предложений. Если одна версия разбита на строки, а другая нет, режим по строкам пометит изменённым всё подряд. Используйте режим по словам или сначала уберите переносы.
- Регистр букв. Сравнение чувствительно к регистру, поэтому «Счёт» и «счёт» — разные слова. Если регистр для вас не важен, приведите оба текста к одному виду с помощью инструмента «Изменить регистр текста» перед вставкой.
- Отсортированные и неотсортированные списки. Diff учитывает порядок. Если два списка содержат одни и те же элементы в разном порядке, перемещения будут показаны как удаления и добавления. Если вас интересует только состав, сначала отсортируйте оба списка одинаково.
- JSON и минифицированные данные. Минифицированный JSON-документ — это одна огромная строка. Отформатируйте обе версии в «JSON форматирование и валидация» с одинаковым отступом и сравнивайте построчно: каждый ключ окажется на своей строке, и изменения станут очевидны.
- Типографские кавычки и тире. Текстовые редакторы заменяют
"на типографские кавычки, а-— на короткое тире. На глаз они выглядят одинаково, но это разные символы, и они попадут в изменения.
Объём и конфиденциальность
Оба текста остаются на странице. На сервер ничего не отправляется, поэтому сравнение неопубликованного договора, внутреннего исходного кода или файла с данными клиентов ничем не отличается от сравнения двух списков покупок. При закрытии вкладки всё стирается.
Скорость зависит от вашего устройства и от того, насколько сильно различаются тексты. Несколько тысяч строк сравниваются мгновенно; десятки тысяч сильно изменённых строк могут обрабатываться несколько секунд. Если работа замедлилась, сравнивайте только нужный фрагмент или используйте режим по строкам — в нём гораздо меньше единиц для сопоставления, чем в режиме по словам.