Diff Checker

مدقق الفروقات

قارن نصين أو شيفرتين مع إبراز الفروق على مستوى السطر والكلمة. عرض جنباً إلى جنب أو موحد، تجاهل المسافات وحالة الأحرف — كل ذلك داخل متصفحك بالكامل.

لا. الأداة بأكملها عبارة عن JavaScript يعمل داخل هذه الصفحة. تعمل خوارزمية diff (LCS) على معالجك ويُعرض الناتج مباشرةً في DOM. افتح DevTools ← Network وراقب — لا تُرسل أي طلبات أثناء عملية المقارنة. آمن للصق الشيفرة الداخلية أو بيانات العملاء أو مسودات العقود أو أي شيء لا تريد لأداة على خادم أن تُسجّله.

أولاً نُقسم المُدخلين إلى أسطر ونُشغّل خوارزمية LCS (أطول تتابع جزئي مشترك). الأسطر المتطابقة في الجانبين تُحدّد كمتساوية. الأسطر غير المتطابقة تُقرَن في صفوف 'تغيير' عند ظهور إضافة مجاورة لحذف. لكل تغيير مقترن، نُشغّل LCS ثانية على كلمات السطر (مفصولة بالمسافات) بحيث تُضاء فقط الكلمات المُعدَّلة فعلياً بالأحمر/الأخضر — لا السطر بأكمله.

لماذا مدقق فروقات iKit

ساحة عمل نظيفة وسريعة لمقارنة النصوص بدون إعلانات أو نوافذ منبثقة أو متعقّبات خارجية — مصممة للمطورين والكتّاب وكل من يحتاج إلى رصد ما تغيّر.

عرض جنباً إلى جنب وعرض موحد

بدّل بنقرة واحدة بين العرض المقسّم (عمودان بإحساس IDE الكلاسيكي) والعرض الموحد (عمود واحد بعلامات +/−). يعرض كلا الوضعين أرقام الأسطر ويُبرز كل تغيير ضمن السطر.

إبراز على مستوى الكلمة

عند تغيير سطرين، نُجري diff ثانٍ على مستوى الكلمة بحيث تتوهج الفروقات الفعلية فقط — لا السطر بأكمله. يسهّل ذلك اكتشاف خطأ مطبعي واحد في سطر من 200 حرف.

تجاهل المسافات وحالة الأحرف

بدّل حساسية المسافات وحالة الأحرف لتصفية التغييرات الشكلية (إعادة تنسيق الإزاحة، تعديلات الكتابة بالأحرف الكبيرة) والتركيز على التعديلات الحقيقية.

خصوصية بالتصميم

يبقى النصان داخل تبويب متصفحك. تعمل خوارزمية diff محلياً عبر JavaScript. يمكنك التحقق من ذلك في DevTools ← Network: لا تُرسل أي طلبات أثناء كتابتك.

إحصاءات ونسخ

اطّلع بنظرة واحدة على عدد الأسطر المضافة والمحذوفة والمعدّلة. وبنقرة واحدة تُنسخ الفروقات إلى الحافظة لإلصاقها في مراجعة شيفرة أو رسالة commit.

يعمل بدون اتصال

بعد تحميل الصفحة، تُحسب كل بايت محلياً. يعمل في الطائرة أو خلف جدار حماية مؤسسي أو بدون شبكة على الإطلاق — مفيد لمراجعات الشيفرة السرّية.

كيف يعمل مدقق الفروقات فعلياً

الرياضيات تحت الغطاء أقدم من الويب — خوارزمية من عام 1965 تُسمى LCS، إضافة إلى تحسين قدّمه يوجين Myers عام 1986.

  1. 1

    التقسيم إلى أسطر

    يُقسَّم المُدخلان عند \n (أو \r\n). يصبح كل سطر رمزاً (token). نُقارن الرموز — لا الأحرف — لأن أغلب التعديلات في الشيفرة أو المستندات الواقعية تُضيف أو تحذف أو تُعدّل أسطراً كاملة.

  2. 2

    حساب LCS

    أطول تتابع جزئي مشترك هو أكبر مجموعة من الأسطر التي تظهر بالترتيب نفسه في كلا المُدخلين. نملأ جدول برمجة ديناميكية انطلاقاً من الزاوية السفلية اليمنى؛ تحتفظ كل خلية بطول LCS من ذلك الموضع حتى النهاية. يستغرق ذلك زمناً وذاكرة بمقدار O(m × n).

  3. 3

    العودة لاستخلاص العمليات

    بدءاً من الزاوية العلوية اليسرى للجدول، نمشي إلى الأمام: إذا تطابق السطران الحاليان أصدرنا تساوٍ؛ وإلا نختار الاتجاه (يميناً أو أسفل) الذي يحافظ على طول LCS، فنُصدر حذفاً أو إدراجاً. الناتج تتابع من العمليات يُحوّل النص الأصلي إلى المعدّل.

  4. 4

    diff على مستوى الكلمة داخل الأزواج المُغيّرة

    عندما يأتي حذف متبوعاً بإدراج، نقرنهما في صف تغيير. ولإبراز الأجزاء المختلفة فقط داخل السطر، نُشغّل خوارزمية LCS نفسها مرة ثانية على كلمات كل جانب، مع التقسيم عند حدود المسافات.

مهام diff شائعة

حالات واقعية ستلجأ فيها إلى مدقق الفروقات.

مراجعة PR قبل التعليق

عرض diff في GitHub رائع، لكن أحياناً تريد رؤية التغييرات الجوهرية فقط دون ضوضاء أداة التنسيق. الصق النسختين، فعّل 'تجاهل المسافات'، وستختفي إعادة التنسيق الشكلية — تاركةً تعديلات المنطق فقط.

مقارنة مسودتي عقد

كثيراً ما يحتاج المحامون وفِرَق العمليات إلى معرفة ما تغيّر بين الإصدار 1 والإصدار 2 من العقد. الصق النسختين، واحصل على diff ملوّن مع إبراز على مستوى الكلمة — بدون Word، وبدون 'تتبّع التغييرات'، وبدون رفع شروط سرّية إلى خادم خارجي.

التحقق مما فعله تعديل سكربت فعلياً

هل شغّلت sed أو awk أو regex من Python على ملف إعدادات؟ الصق الأصل والناتج هنا للتأكد من أن السكربت عدّل ما توقعته فقط. الإبراز على مستوى الحرف يلتقط تعديلات شاردة قد تُفلت من الفحص البصري السريع.

اكتشاف خطأ مطبعي في نص مُترجم

زوج ترجمة (المصدر مقابل الترجمة، أو ترجمتان للمصدر نفسه) — يجعل diff على مستوى الكلمة من السهل العثور على كلمة مفقودة أو عبارة مكررة أو علامة ترقيم منقلبة فاتت المُدقّقين.

لماذا المقارنة المحلية مهمة

النصوص التي تقارنها عادةً ما تكون خاصة: شيفرة من مستودعات داخلية، مسودات عقود، تصدير بيانات عملاء، أو نسخ منتجات لم تُطلق بعد. لصقها في خادم غريب يُنشئ سجلاً لا تتحكم به. مدقق فروقات iKit هو JavaScript محمّل أصلاً في تبويب متصفحك — تجري المقارنة على معالجك ولا تلامس أي مقبس شبكة.

  • صفر طلبات شبكة أثناء المقارنة — قابل للتحقق في DevTools ← Network.
  • تبقى المُدخلات في ذاكرة المتصفح؛ وتُمسح عند الضغط على 'مسح' أو تحديث الصفحة.
  • آمن للشيفرة الداخلية والمستندات المحمية باتفاقيات عدم الإفصاح ونصوص دعم العملاء وكل ما تشمله سياسات إقامة البيانات.

Related guides

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

الأسئلة الشائعة

هل هذا آمن؟ هل تُرفع نصوصي؟

لا. الأداة بأكملها عبارة عن JavaScript يعمل داخل هذه الصفحة. تعمل خوارزمية diff (LCS) على معالجك ويُعرض الناتج مباشرةً في DOM. افتح DevTools ← Network وراقب — لا تُرسل أي طلبات أثناء عملية المقارنة. آمن للصق الشيفرة الداخلية أو بيانات العملاء أو مسودات العقود أو أي شيء لا تريد لأداة على خادم أن تُسجّله.

كيف يعمل الإبراز على مستوى السطر والكلمة؟

أولاً نُقسم المُدخلين إلى أسطر ونُشغّل خوارزمية LCS (أطول تتابع جزئي مشترك). الأسطر المتطابقة في الجانبين تُحدّد كمتساوية. الأسطر غير المتطابقة تُقرَن في صفوف 'تغيير' عند ظهور إضافة مجاورة لحذف. لكل تغيير مقترن، نُشغّل LCS ثانية على كلمات السطر (مفصولة بالمسافات) بحيث تُضاء فقط الكلمات المُعدَّلة فعلياً بالأحمر/الأخضر — لا السطر بأكمله.

ما الفرق بين العرض المقسّم والعرض الموحد؟

يعرض الوضع المقسّم النصين جنباً إلى جنب مع أرقام أسطر مقترنة — أقرب إلى ما يبدو عليه diff في بيئات IDE (VS Code وJetBrains). أما العرض الموحد فيُظهر عموداً واحداً بأسطر تبدأ بـ +/− — أقرب إلى ما يطبعه `git diff`. اختر ما يناسب سير عملك؛ كلاهما يعرض البيانات نفسها.

لماذا تُفيد خاصية 'تجاهل المسافات'؟

إعادة تنسيق الشيفرة (تشغيل Prettier، التبديل بين Tab والمسافة، توحيد نهايات الأسطر) تضيف ضوضاء بصرية تُخفي التغييرات الفعلية. تفعيل 'تجاهل المسافات' يطوي تتابعات المسافات/الجدولة إلى مسافة واحدة ويقتطع أطراف السطر قبل المقارنة — لكي ترى التعديلات الجوهرية فقط لا الشكلية.

ما أكبر مُدخل يمكنني مقارنته في المتصفح؟

تستخدم خوارزمية LCS ذاكرة بمقدار O(m × n) حيث m وn عدد الأسطر في كل جانب. يحدّ iKit المقارنة عند نحو 4 ملايين خلية (≈16 ميغابايت)، وهو ما يستوعب بأريحية بضعة آلاف من الأسطر مقابل بضعة آلاف. للفروقات الأكبر (تفريغات قواعد بيانات كاملة، سجلات ملفات بالكامل)، استخدم أداة CLI مثل `diff` أو `git diff --no-index` — فهي تستخدم خوارزمية أذكى (Myers diff) تتدرج لملايين الأسطر.