Diff Checker

بررسی‌کننده Diff

دو متن یا کد را با هایلایت سطر و کلمه مقایسه کنید. کنار هم یا یکپارچه، نادیده‌گرفتن فاصله، نادیده‌گرفتن حروف بزرگ و کوچک — کاملاً در مرورگر شما.

خیر. کل ابزار JavaScript است که داخل همین صفحه اجرا می‌شود. الگوریتم diff (طولانی‌ترین زیردنباله مشترک) روی CPU شما اجرا می‌شود و نتیجه مستقیماً در DOM رندر می‌شود. DevTools → Network را باز کنید و ببینید — هیچ درخواستی هنگام diff ارسال نمی‌شود. چسباندن کد داخلی، داده‌های مشتری، پیش‌نویس قرارداد یا هر چیز دیگری که نمی‌خواهید یک ابزار سروری ثبت کند، امن است.

ابتدا هر دو ورودی را به سطرها تقسیم می‌کنیم و الگوریتم LCS (طولانی‌ترین زیردنباله مشترک) را اجرا می‌کنیم. سطرهایی که در دو طرف مطابقت دارند برابر علامت می‌خورند. سطرهایی که مطابقت ندارند، وقتی یک افزودن کنار یک حذف قرار می‌گیرد، در ردیف‌های «تغییر» جفت می‌شوند. برای هر تغییر جفت‌شده، LCS دوم را روی کلمات سطر (تقسیم‌شده با فاصله) اجرا می‌کنیم تا فقط کلمات واقعاً ویرایش‌شده با رنگ قرمز/سبز روشن شوند — نه کل سطر.

چرا iKit Diff Checker

یک محیط diff متنی تمیز و سریع، بدون تبلیغ، پاپ‌آپ یا ردیاب‌های شخص ثالث — ساخته‌شده برای توسعه‌دهندگان، نویسندگان و هر کسی که می‌خواهد تغییرات را تشخیص دهد.

نمای کنار هم و یکپارچه

با یک کلیک بین حالت تقسیم‌شده (دو ستون، شبیه IDE کلاسیک) و یکپارچه (یک ستون با نشانه‌های +/−) جابه‌جا شوید. هر دو نما شماره‌گذاری سطر دارند و هر تغییری را به‌صورت درون‌خطی هایلایت می‌کنند.

هایلایت در سطح کلمه

وقتی دو سطر تغییر می‌کنند، diff دومی در سطح کلمه اجرا می‌کنیم تا فقط تفاوت‌های واقعی برجسته شوند — نه کل سطر. تشخیص یک غلط تایپی در سطر ۲۰۰ کاراکتری ساده‌تر می‌شود.

نادیده‌گرفتن فاصله و حروف بزرگ/کوچک

حساسیت به فاصله و حروف بزرگ/کوچک را خاموش کنید تا تغییرات ظاهری (تورفتگی بازقالب‌بندی‌شده، تغییرات بزرگ‌نویسی) فیلتر شوند و روی ویرایش‌های واقعی تمرکز کنید.

حریم خصوصی از پایه

هر دو متن در تب مرورگر شما باقی می‌مانند. الگوریتم diff به‌صورت محلی در JavaScript اجرا می‌شود. در DevTools → Network قابل تأیید است: هنگام تایپ هیچ درخواستی ارسال نمی‌شود.

آمار و کپی

در یک نگاه ببینید چند سطر اضافه، حذف یا تغییر یافته است. با یک کلیک diff در کلیپ‌بورد کپی می‌شود تا در بازبینی کد یا پیام کامیت بچسبانید.

کار آفلاین

پس از بارگذاری صفحه، هر بایت به‌صورت محلی محاسبه می‌شود. در هواپیما، پشت فایروال شرکتی یا حتی بدون شبکه کار می‌کند — مفید برای بازبینی کد محرمانه.

بررسی‌کننده diff واقعاً چگونه کار می‌کند

ریاضیات پشت آن قدیمی‌تر از وب است — الگوریتمی به نام LCS از سال ۱۹۶۵، به‌علاوه اصلاحیه‌ای در ۱۹۸۶ توسط یوجین مایرز.

  1. 1

    تقسیم به سطرها

    هر دو ورودی روی \n (یا \r\n) شکسته می‌شوند. هر سطر یک توکن می‌شود. ما توکن‌ها را مقایسه می‌کنیم — نه کاراکترها — زیرا بیشتر ویرایش‌ها در کد یا اسناد دنیای واقعی، سطرهای کامل را اضافه، حذف یا تغییر می‌دهند.

  2. 2

    محاسبه LCS

    طولانی‌ترین زیردنباله مشترک، بزرگ‌ترین مجموعه از سطرهایی است که در هر دو ورودی به ترتیب یکسان ظاهر می‌شوند. ما یک جدول DP را از پایین-راست پر می‌کنیم؛ هر سلول طول LCS از آن موقعیت تا انتها را نگه می‌دارد. این کار در زمان و حافظه O(m × n) انجام می‌شود.

  3. 3

    بازگشت برای استخراج عملیات

    از بالا-چپ جدول شروع کرده و به جلو حرکت می‌کنیم: اگر دو سطر فعلی مطابقت داشتند، یک برابر خروجی می‌دهیم؛ در غیر این صورت جهتی (راست یا پایین) را انتخاب می‌کنیم که طول LCS را حفظ کند و یک حذف یا درج خروجی می‌دهیم. نتیجه، دنباله‌ای از عملیات است که اصلی را به تغییریافته تبدیل می‌کند.

  4. 4

    diff در سطح کلمه درون جفت‌های تغییریافته

    وقتی یک حذف به‌دنبال یک درج می‌آید، آن‌ها را به‌عنوان یک ردیف تغییر جفت می‌کنیم. برای هایلایت فقط بخش‌هایی که در سطر متفاوت هستند، همان الگوریتم LCS را بار دوم روی کلمات هر طرف اجرا می‌کنیم و در مرز فاصله تقسیم می‌کنیم.

وظایف رایج diff

موقعیت‌های واقعی که سراغ یک بررسی‌کننده diff می‌روید.

بازبینی PR قبل از نظر دادن

نمای diff در GitHub عالی است، اما گاهی می‌خواهید فقط تغییرات اساسی را بدون نویز قالب‌بندی ببینید. هر دو نسخه را بچسبانید، نادیده‌گرفتن فاصله را روشن کنید، و بازقالب‌بندی‌های ظاهری ناپدید می‌شوند — فقط ویرایش‌های منطقی باقی می‌مانند.

مقایسه دو پیش‌نویس قرارداد

وکلا و تیم‌های عملیاتی اغلب نیاز دارند بدانند بین نسخه ۱ و ۲ یک قرارداد چه تغییری کرده است. هر دو را بچسبانید، یک diff رنگی با هایلایت در سطح کلمه دریافت کنید — بدون Word، بدون Track Changes، بدون آپلود مفاد محرمانه به سرور شخص ثالث.

بررسی اینکه ویرایش یک اسکریپت واقعاً چه کرد

یک regex با sed/awk/Python روی فایل پیکربندی اجرا کردید؟ نسخه اصلی و نتیجه را اینجا بچسبانید تا تأیید کنید اسکریپت فقط آنچه را که انتظار داشتید ویرایش کرده است. هایلایت در سطح کاراکتر، ویرایش‌های پراکنده‌ای را که اسکن بصری سریع از دست می‌دهد، می‌گیرد.

تشخیص غلط تایپی در متن ترجمه‌شده

جفت ترجمه (منبع در برابر ترجمه، یا دو ترجمه از یک منبع) — diff در سطح کلمه پیدا کردن یک کلمه گم‌شده، یک عبارت تکراری یا یک علامت نقطه‌گذاری اشتباه را که بازخوان‌ها از قلم انداخته‌اند، آسان می‌کند.

چرا diff محلی اهمیت دارد

متن‌هایی که مقایسه می‌کنید معمولاً خصوصی هستند: کد از مخازن داخلی، پیش‌نویس قرارداد، خروجی داده‌های مشتری یا متن‌های منتشرنشده محصول. چسباندن آن‌ها در سرور یک غریبه، ردپایی ایجاد می‌کند که در کنترل شما نیست. بررسی‌کننده diff iKit همان JavaScript است که از قبل در تب مرورگر شما بارگذاری شده — مقایسه روی CPU شما اجرا می‌شود و هرگز به سوکت شبکه دست نمی‌زند.

  • هیچ درخواست شبکه‌ای هنگام diff — قابل تأیید در DevTools → Network.
  • ورودی‌ها در حافظه مرورگر باقی می‌مانند؛ با پاک‌کردن یا تازه‌سازی صفحه پاک می‌شوند.
  • برای کد داخلی، اسناد تحت NDA، رونوشت پشتیبانی مشتری و هر چیزی که تحت سیاست‌های اقامت داده قرار دارد، امن است.

Related guides

Deep-dive tutorials and tool comparisons from the iKit blog.

پرسش‌های متداول

آیا این ابزار امن است؟ آیا متن‌های من آپلود می‌شوند؟

خیر. کل ابزار JavaScript است که داخل همین صفحه اجرا می‌شود. الگوریتم diff (طولانی‌ترین زیردنباله مشترک) روی CPU شما اجرا می‌شود و نتیجه مستقیماً در DOM رندر می‌شود. DevTools → Network را باز کنید و ببینید — هیچ درخواستی هنگام diff ارسال نمی‌شود. چسباندن کد داخلی، داده‌های مشتری، پیش‌نویس قرارداد یا هر چیز دیگری که نمی‌خواهید یک ابزار سروری ثبت کند، امن است.

هایلایت در سطح سطر و کلمه چگونه کار می‌کند؟

ابتدا هر دو ورودی را به سطرها تقسیم می‌کنیم و الگوریتم LCS (طولانی‌ترین زیردنباله مشترک) را اجرا می‌کنیم. سطرهایی که در دو طرف مطابقت دارند برابر علامت می‌خورند. سطرهایی که مطابقت ندارند، وقتی یک افزودن کنار یک حذف قرار می‌گیرد، در ردیف‌های «تغییر» جفت می‌شوند. برای هر تغییر جفت‌شده، LCS دوم را روی کلمات سطر (تقسیم‌شده با فاصله) اجرا می‌کنیم تا فقط کلمات واقعاً ویرایش‌شده با رنگ قرمز/سبز روشن شوند — نه کل سطر.

تفاوت نمای Split و Unified چیست؟

نمای تقسیم‌شده دو متن را کنار هم با شماره‌های سطر جفت‌شده نمایش می‌دهد — نزدیک به آنچه diff در IDEها (VS Code, JetBrains) ظاهر می‌شود. نمای یکپارچه یک ستون با سطرهای پیشوند +/− نشان می‌دهد — نزدیک به خروجی `git diff`. هرکدام که با جریان کاری شما هماهنگ است انتخاب کنید؛ هر دو همان داده را رندر می‌کنند.

چرا «نادیده‌گرفتن فاصله» کمک می‌کند؟

بازقالب‌بندی کد (اجرای Prettier، تغییر تب/فاصله، نرمال‌سازی پایان سطر) نویز بصری اضافه می‌کند که تغییرات واقعی را پنهان می‌کند. روشن‌کردن «نادیده‌گرفتن فاصله» دنباله‌ای از فاصله‌ها/تب‌ها را به یک فاصله جمع می‌کند و قبل از diff لبه‌های سطر را پاک می‌کند — بنابراین فقط ویرایش‌های معنادار را می‌بینید، نه ظاهری.

بزرگ‌ترین ورودی که می‌توانم در مرورگر diff کنم چیست؟

الگوریتم LCS از حافظه O(m × n) استفاده می‌کند که m و n تعداد سطرهای هر طرف هستند. iKit مقایسه را در حدود ۴ میلیون سلول (≈۱۶ مگابایت) محدود می‌کند، که چند هزار سطر در مقابل چند هزار سطر را به‌راحتی پوشش می‌دهد. برای diffهای بزرگ‌تر (دامپ کامل پایگاه داده، لاگ‌های کامل فایل) از یک ابزار CLI مثل `diff` یا `git diff --no-index` استفاده کنید — این‌ها از الگوریتم هوشمندتری (Myers diff) استفاده می‌کنند که تا میلیون‌ها سطر مقیاس می‌گیرد.