ما هو التحرير التعاوني في الوقت الفعلي؟

يسمح التحرير التعاوني في الوقت الفعلي لعدة أشخاص بالعمل على نفس المستند في نفس الوقت، حيث تكون تغييرات كل شخص مرئية على الفور للجميع. استخدمت الأنظمة المبكرة تقنية Operational Transformation (OT) — وهي تقنية تعيد ترتيب التعديلات المتضاربة أثناء التنفيذ — لكن OT تتطلب خادماً مركزياً للتحكم في كل تغيير. تستخدم الأنظمة الحديثة مثل Yjs أنواع البيانات المكررة الخالية من التضارب (CRDTs): إطار عمل رياضي حيث يمكن دمج أي نسختين في أي ترتيب وتتقاربان دائماً إلى نفس النتيجة، دون الحاجة إلى سلطة مركزية لتقرير من "يفوز".

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

وصف الأداة

محرر الأكواد التعاوني هو محرر أكواد متعدد اللاعبين في الوقت الفعلي مدعوم بـ Yjs و CodeMirror 6. شارك عنوان URL الغرفة مع زملائك وسيقوم الجميع في الغرفة بتحرير نفس المستند معاً، مع ظهور مؤشر مسمى يعرض مؤشر الماوس والتحديد لكل شخص.

يدعم المحرر تمييز بناء الجملة لعشرات لغات البرمجة، قابلة للاختيار من خلال قائمة منسدلة مشتركة للغة — تغيير اللغة في متصفح واحد يحدثها على الفور للجميع في الغرفة. يمكن تحميل الملفات من قرصك المحلي باستخدام زر فتح الملف وتنزيلها مرة أخرى باستخدام حفظ الملف.

الميزات

  • مؤشرات المستخدمين المتعددين المباشرة: يتم عرض مؤشر ماوس وتحديد كل متعاون مع تسمية ملونة؛ يتم طي مؤشرات متعددة في نفس الموضع في مؤشر واحد "N مستخدمين" لتقليل الفوضى البصرية.
  • اختيار اللغة المشترك: يتم الاحتفاظ باللغة البرمجية النشطة في الغرفة بحيث يرى جميع المشاركين نفس تمييز بناء الجملة، والمنضمون المتأخرون يحصلون على الحالة الصحيحة على الفور.
  • فتح وحفظ الملفات محلياً: قم بتحميل أي ملف مصدر من القرص مباشرة إلى المحرر المشترك، أو قم بتنزيل المستند الحالي كملف بالامتداد الصحيح.

كيف يعمل

عند الانضمام إلى غرفة، ينشئ المحرر مستند Yjs مع عقدة Y.Text مشتركة تمثل محتويات الملف. يتم ترميز كل ضغطة مفتاح كتحديث Yjs ثنائي مضغوط، وتسلسله إلى Base64، وبثه عبر غرفة WebSocket. يطبق جميع الأقران المتصلين التحديث على نسختهم الخاصة؛ بسبب ضمان CRDT، تتقارب جميع النسخ إلى نفس النص بغض النظر عن ترتيب وصول التحديثات.

يتم مشاركة مواضع مؤشر الماوس والتحديد من خلال طبقة Awareness خفيفة الوزن توجه بيانات الموضع عبر نفس غرفة WebSocket. يتم تأجيل حالة المستند الكاملة وكتابتها إلى تخزين الغرفة الدائم كل ثانية، بحيث يحصل المستخدمون الذين ينضمون بعد بدء الجلسة على المستند الحالي على الفور.

شرح الخيارات

  • قائمة اللغة المنسدلة — تحدد لغة تمييز بناء الجملة للمحرر. يتم بث الاختيار إلى جميع أعضاء الغرفة بحيث يرى الجميع تمييزاً متسقاً. يتم تعطيل القائمة المنسدلة حتى تتصل بغرفة.
  • فتح الملف — يفتح منتقي الملفات المحلي ويحمل محتوى نص الملف المحدد في مستند Yjs المشترك، مما يستبدل المحتويات الحالية للجميع في الغرفة.
  • حفظ الملف — يقوم بتنزيل محتوى المحرر الحالي كملف. يتم اختيار امتداد الملف تلقائياً بناءً على اللغة المحددة.
  • المظهر — يتبع المحرر تفضيل النظام الداكن/الفاتح الخاص بك (المخزن في localStorage). قم بتبديل نظام التشغيل أو موضوع المتصفح الخاص بك للتبديل بين مواضيع محرر VS Code الداكنة والفاتحة.

القيود

  • يلزم وجود اتصال WebSocket نشط بخادم الترحيل للمزامنة؛ إذا انقطع الاتصال، سيتم إعادة مزامنة التعديلات التي تمت دون اتصال تلقائياً عند إعادة الاتصال.
  • لا توجد سجلات إصدارات دائمة — بمجرد انتهاء الجلسة وإغلاق الغرفة، يختفي المستند ما لم تحفظه محلياً باستخدام زر حفظ الملف.
  • لا يمكن تحميل الملفات الثنائية (الصور والملفات الثنائية المترجمة وما إلى ذلك)؛ يعمل المحرر مع ملفات المصدر النصية العادية فقط.
  • هذه الأداة في الإصدار التجريبي؛ قد تكون استقرار الغرفة والحد الأقصى للمستخدمين المتزامنين محدوداً.

نصائح

  • شارك عنوان URL الكامل للغرفة من شريط عنوان المتصفح الخاص بك لدعوة المتعاونين — معرف الغرفة مشفر في عنوان URL.
  • احفظ نسخة محلية باستخدام حفظ الملف في نهاية الجلسة؛ لا يضمن بقاء بيانات الغرفة إلى أجل غير مسمى.
  • إذا كانت تسمية مؤشر ماوس المتعاون تغطي كوداً مهماً، فإن التسمية تنقلب تلقائياً إلى اليسار عند الاقتراب من الحافة اليمنى للمحرر.