Diff Checker

Diff Checker

比对两段文本或代码,逐行 + 逐字高亮。并排或统一视图、忽略空白、忽略大小写 — 完全在你的浏览器内运算。

不会。整个工具就是这个标签页里的 JavaScript。Diff 算法(LCS,longest common subsequence)在你的 CPU 上跑,结果直接渲染到 DOM。打开 DevTools → Network 即可验证:比对过程不会发任何请求。可以放心粘贴内部代码、客户数据、合同草稿等任何不该被服务器记录的内容。

先把两边输入按行切开,跑 LCS(longest common subsequence)算法。两边都有的行标记为「相等」;不相等的行会配对成「change」行(删除紧接着新增就配对)。对每个配对的 change 行,我们在这行的字词上(以空白切分)再跑第二次 LCS,所以只有真正被编辑的字词会变红/绿 — 不是整行变色。

为什么选 iKit Diff Checker

为开发者、写作者,以及任何想看「到底改了什么」的人打造的干净快速 diff 工具 — 没有弹窗广告,也没有第三方追踪。

并排 + 统一两种视图

一键切换并排(IDE 风格的两栏)与统一(单栏附 +/− 标记)。两种视图都会显示行号,并逐字高亮变更部分。

逐字高亮

当两行有差异,我们会在这对行上跑第二次逐字 diff — 只有真正不同的部分会被标色,而不是整行变色。在 200 字的长行里找一个错别字也很轻松。

忽略空白 + 忽略大小写

切换空白与大小写敏感度,过滤掉表面上的差异(重新缩进、大小写调整),只专注在真正的编辑。

隐私至上的设计

两段文本都留在你的浏览器标签页。Diff 算法在本地的 JavaScript 执行。可在 DevTools → Network 验证:输入时零网络请求。

统计 + 一键复制

一眼看到新增、删除、修改了几行。一键把 diff 复制到剪贴板,直接粘贴进 code review 或 commit message。

离线可用

页面加载后所有运算都在本地 — 飞机上、企业防火墙后、甚至没网络都能用。处理机密 code review 特别有用。

Diff checker 是怎么运作的

算法本身比 web 还老 — 1965 年的 LCS,加上 1986 年 Eugene Myers 的优化。

  1. 1

    切成行

    两边输入都用 \n(或 \r\n)切开。每行就是一个 token。我们比对 token,而不是逐字 — 因为真实世界里多数编辑都是新增、删除或修改整行。

  2. 2

    计算 LCS

    Longest Common Subsequence 是两边以相同顺序出现的最大行集合。我们从右下角开始填 DP 表,每格存「从这个位置到结尾的 LCS 长度」。时间与内存都是 O(m × n)

  3. 3

    回溯推出操作序列

    从表格的左上角往前走:若两边当前行相同,输出「相等」;否则往右或往下选能保住 LCS 长度的方向,输出「删除」或「新增」。结果是一串能把 Original 变成 Modified 的操作序列。

  4. 4

    对 change 行做逐字 diff

    当删除紧接着新增,我们把它们配对成「change」行。为了只高亮行内真正不同的部分,我们以空白切分这对行的字词,再跑一次同样的 LCS。

Diff 常见任务

你会在哪些场景下需要 diff checker?

PR 留 review 前先看清楚

GitHub 的 diff 已经很好,但有时你只想看「实质变更」,把 formatter 噪声滤掉。把两个版本粘贴进来、打开「忽略空白」— 表面 reformat 全部消失,只留下逻辑编辑。

比对两份合同草稿

法务或 ops 常需要知道合同 v1 跟 v2 改了什么。两份粘贴上,马上得到带逐字高亮的彩色 diff — 不用 Word、不用修订追踪、不会把机密条款上传到别人的服务器。

确认脚本真的只改了该改的

用 sed/awk/Python regex 改过配置文件?把原始文件和结果粘贴进来,确认脚本只动了预期的部分。逐字高亮能抓到肉眼扫过会漏的零星修改。

找翻译文本里的错别字

翻译对照(原文 vs 译文,或同一原文的两种译本)— 逐字 diff 让「漏字、重复短语、标点翻转」这类校稿时容易漏掉的问题一目了然。

为什么本地 diff 很重要

你比对的文本通常是私密的:内部 repo 的代码、合同草稿、客户数据导出、未发布的产品文案。把这些粘贴到别人的服务器,等于留下你无法控制的记录。iKit 的 diff checker 就是已加载浏览器标签页的 JavaScript — 比对在你的 CPU 上执行,完全没经过网络。

  • 比对期间零网络请求 — 可在 DevTools → Network 验证。
  • 输入只存在浏览器内存;按 Clear 或刷新就清掉。
  • 可放心使用内部代码、保密文档、客服消息、以及任何受数据驻留政策保护的内容。

相关教程

来自 iKit 博客的深度教程与工具对比。

常见问题

这安全吗?我的文本会被上传吗?

不会。整个工具就是这个标签页里的 JavaScript。Diff 算法(LCS,longest common subsequence)在你的 CPU 上跑,结果直接渲染到 DOM。打开 DevTools → Network 即可验证:比对过程不会发任何请求。可以放心粘贴内部代码、客户数据、合同草稿等任何不该被服务器记录的内容。

逐行 + 逐字高亮是怎么运作的?

先把两边输入按行切开,跑 LCS(longest common subsequence)算法。两边都有的行标记为「相等」;不相等的行会配对成「change」行(删除紧接着新增就配对)。对每个配对的 change 行,我们在这行的字词上(以空白切分)再跑第二次 LCS,所以只有真正被编辑的字词会变红/绿 — 不是整行变色。

并排与统一视图有什么区别?

并排视图把两段文本左右并列,搭配对应的行号 — 比较像 IDE(VS Code、JetBrains)的 diff。统一视图只显示一栏,行首加 +/− 前缀 — 比较像 `git diff` 的输出。挑你工作流顺手的那个用,两者显示的是同一份数据。

为什么「忽略空白」有用?

重新格式化代码(跑 Prettier、切换 tab / space、统一行尾)会带来大量视觉噪声,把真正的修改埋掉。打开「忽略空白」会在比对前把连续空白缩成一个空白并 trim 两端 — 你看到的就只剩有意义的编辑,不会被表面差异干扰。

浏览器最多能 diff 多大的输入?

LCS 算法的内存是 O(m × n),m、n 是两边各自的行数。iKit 把上限设在约 400 万格(≈16 MB),足够应付数千行 vs 数千行的比对。更大的 diff(整个数据库 dump、整个日志文件)请用 CLI 工具如 `diff` 或 `git diff --no-index` — 它们用更聪明的算法(Myers diff),可以处理数百万行。