كيف تعمل خوارزميات المقارنة
كل عرض diff في هذه الصفحة تُنتجه خوارزمية Myers — تقنية عام 1986 لـ Eugene W. Myers تجد أقصر سكريبت تحرير بين تسلسلَي رموز في زمن O((N+M)D)، حيث D هو مسافة التحرير. تُبنى الخوارزمية حول مسألة المتتالية الفرعية المشتركة الأطول، ويعمل المحرك كليًا داخل متصفحك باستخدام مكتبة jsdiff مفتوحة المصدر.
- تقسيم المدخلات إلى رموز — قبل المقارنة، تقسِّم الخوارزمية كل مدخل إلى تسلسل رموز. دقة السطر تقسِّم على فواصل الأسطر؛ دقة الكلمة تقسِّم على حدود المسافات وعلامات الترقيم؛ ودقة الحرف تُعامل كل نقطة Unicode كرمز مستقل.
- بناء رسم التحرير — تُنمذج خوارزمية Myers المقارنة كمسار عبر شبكة ثنائية الأبعاد حيث الحركة يمينًا تعني "حذف من الأصل"، والحركة للأسفل تعني "إدراج من المعدَّل"، والحركة قطريًا تعني "الرمز موجود في كليهما". تجد الخوارزمية أقصر مسار كثيف الأقطار.
- استخراج LCS — الحركات القطرية في أقصر مسار تتتبع المتتالية الفرعية المشتركة الأطول — الرموز الموجودة في كلا المدخلَين بنفس الترتيب النسبي. كل رمز في LCS هو "غير مُغيَّر"؛ كل ما عداه إما إضافة أو حذف.
- تطبيق خيارات المعالجة المسبقة — إذا فعَّلت "تجاهل حالة الأحرف"، تُحوَّل كلا المدخلَين إلى أحرف صغيرة قبل تمرير LCS. "تجاهل المسافات" يضغط المسافات المتعددة في مسافة واحدة. "قص كل سطر" يزيل المسافات البادئة والمتأخرة لكل سطر قبل المقارنة.
- عرض العرض المحدد — الناتج هو نتيجة LCS ذاتها تُعرض بثلاث طرق: جنبًا لجنب يُظهر الأصل يسارًا والمعدَّل يمينًا في شبكة عمودين مع تظليل أحمر وأخضر للصفوف. الموحَّد يعرض عمودًا واحدًا بأسطر بادئة بـ − و+، مثل مخرج
git diff. المدمج يعرض الحذوفات بخط شطب أحمر والإضافات بتسطير أخضر داخل تدفق النص ذاته. - حساب شريط الملخص — بعد العرض، تُحصي الأداة عدد الرموز المُضافة والمحذوفة وغير المتغيَّرة، ثم تحسب التشابه بوصفه نسبة الرموز غير المتغيَّرة إلى أكبر المدخلَين طولًا. تشابه 100% يعني أن المدخلَين متطابقان بعد المعالجة المسبقة.
لماذا تستخدم مقارن النصوص
- مراجعة الكود بدون عميل Git — الصِق نسختَين من ملف إعداد أو ترحيل SQL أو سكريبت شل واعرف ما الذي تغيَّر دون استنساخ مستودع أو تبديل فروع أو انتظار خط CI. الأداة مفيدة للمراجعات السريعة خلال البرمجة الثنائية ولتسليمات المتعاقدين الذين لم يشاركوا تاريخ Git الخاص بهم.
- تدقيق العقود والمستندات — تُظهر مقارنة الكلمات المصطلحات التي انتقلت بين مسودات العقد أسرع من لوحة تتبع التغييرات في Word. الصِق بندًا من المسودة الأولى وبندًا من النسخة الموقَّعة فيضيء الاستبدال أحمرًا على أخضر عند العبارة التي تحركت بالضبط.
- مراجعة المقالات والمسودات — يستطيع الكتّاب الذين يقارنون مسودة أولى بنسخة محررة التبديل إلى دقة الكلمة لرؤية كل استبدال وإدراج وحذف دون قراءة كلتا النسختين من البداية. يصلح العمل ذاته للمترجمين ولمحرري النصوص الذين يتحققون من أن التحرير الأسلوبي حافظ على صوت المؤلف.
- مقارنة السجلات والإعدادات — يستطيع مسؤولو النظام الذين يقارنون لقطتَي إعداد خادم أو جدولَي Cron أو مخرجَي
ps auxاستخدام دقة السطر لتحديد المعامل المتغيَّر الوحيد في ملف مكوَّن من 200 سطر في ثوانٍ. اقرنه بخيار تجاهل المسافات ليتقلص diff المحاذاة الصاخب إلى تغييرات المعاملات التي تهم فعلًا.
التطبيقات الشائعة
تظهر مقارنة النصوص في نهاية كل دورة تحرير في أعمال الكتابة والتطوير والعمليات.
- مراجعة طلبات السحب: الصِق تنفيذَين لدالة جنبًا لجنب لفهم تغيير المنطق قبل الموافقة، دون تكلفة سحب الفرع.
- ضمان جودة التدويل: قارن سلسلة مصدر إنجليزية بمكافئها المترجم على مستوى الكلمة لاكتشاف الإدراجات أو الحذوفات أو مبادلات المصطلحات التي ربما أدخلها المترجم.
- تحليل الحوادث: قارن لقطتَين من بيان Kubernetes أو مخرجَين من "docker inspect" على مستوى السطر لعزل تغيير الإعداد الذي سبق انقطاع الخدمة.
مثال عملي
خذ إعداد خادم من خمسة أسطر. الأصلي: host=localhost، port=5432، dbname=app_db، user=app، password=secret. المعدَّل: host=db.prod.example.com، port=5432، dbname=app_db، user=app_prod، password=secret. بدقة السطر وعرض جنبًا لجنب: السطر 1 يُظهر أحمرًا يسارًا (host=localhost) وأخضرًا يمينًا (host=db.prod.example.com)، والسطر 4 يُظهر أحمرًا (user=app) وأخضرًا (user=app_prod)، والأسطر 2 و3 و5 تبقى غير متغيَّرة على كلا الجانبين. يُفيد شريط الملخص بـ 2 إضافة و2 حذف و3 غير متغيَّر وتشابه 60%. بدِّل إلى دقة الكلمة: يتضيَّق الـ diff أكثر إذ تضيء القيم فقط عن يمين = في السطرَين 1 و4، وتبقى المفاتيح غير متغيَّرة، ويرتفع التشابه إلى نحو 85%.
هل تعمل هذه الأداة داخل متصفحي؟
نعم. تعمل عملية حساب diff كليًا من جانب العميل باستخدام مكتبة jsdiff مفتوحة المصدر المُحمَّلة مع الصفحة. لا شيء تكتبه أو تلصقه أو تقارنه يُرسَل إلى أي خادم. يمكنك التحقق بنفسك: افتح DevTools واذهب إلى تبويب Network، امسح السجل، انقر مقارنة، وتأكد عدم إطلاق أي طلبات شبكية لخطوة المقارنة.
ماذا يعني مئوية التشابه؟
يُحسَب التشابه بمعادلة الرموز غير المتغيَّرة / الأكبر من (مجموع رموز الأصل، مجموع رموز المعدَّل). نتيجة 100% تعني أن المدخلَين متطابقان بعد خيارات المعالجة المسبقة. نتيجة 0% تعني عدم وجود رمز مشترك بين المدخلَين. المقياس تقريب لمسافة التحرير — مفيد كمقياس سريع — لا نتيجة انتحال أو أصالة.
هل يمكنني مقارنة JSON / YAML / XML دلاليًا؟
لا في هذه الأداة. هذا diff على مستوى النص، لذا يُظهر إعادة تنسيق JSON أو XML بمسافات فقط تغييرات كثيرة رغم أن البيانات متطابقة منطقيًا. كما يُظهر إعادة ترتيب مفاتيح الكائنات في JSON تغييرات رغم أن معظم المحللين يعاملون ترتيب المفاتيح كشيء غير ذي أهمية. بالنسبة لـ diff دلالي حقيقي نحن نخطط لأداة JSON Diff مخصصة.
كيف يختلف العرض الموحَّد عن الجنبي؟
يعرض جنبًا لجنب عمودَين: الأصلي يسارًا والمعدَّل يمينًا، مع تظليل أسطر المحذوفات باللون الأحمر يسارًا والمضافة باللون الأخضر يمينًا. تظهر الأسطر غير المتغيَّرة في كلا العمودَين على نفس الصف. يعرض الموحَّد عمودًا واحدًا ببادئة − وخلفية حمراء للأسطر المحذوفة وبادئة + وخلفية خضراء للأسطر المضافة — نفس تنسيق طباعة git diff. استخدم الموحَّد حين تريد نسخ النتيجة كملف patch أو لصقها في خيط مراجعة كود. استخدم جنبًا لجنب حين يهمك التوافق البصري لما حلَّ محل ماذا.
الصِق الأصل يسارًا والنسخة المعدَّلة يمينًا، اختر عرضًا ودقةً، وتظهر المقارنة في ميلي ثوانٍ. فعِّل الوضع الحي وستُعاد المقارنة عند كل ضغطة مفتاح أثناء تحرير أي جانب. نزِّل النتيجة كملف .patch موحَّد قياسي يستهلكه git apply مباشرةً. بدون رفع، وبدون حساب، وبدون مفتاح API خارجي، وبدون حصص.