Τι είναι η συνεργατική επεξεργασία σε πραγματικό χρόνο;

Η συνεργατική επεξεργασία σε πραγματικό χρόνο επιτρέπει σε πολλούς ανθρώπους να εργάζονται στο ίδιο έγγραφο ταυτόχρονα, με τις αλλαγές κάθε ατόμου να είναι άμεσα ορατές σε όλους τους άλλους. Τα πρώιμα συστήματα χρησιμοποιούσαν Operational Transformation (OT) — μια τεχνική που αναδιατάσσει τις συγκρουόμενες επεξεργασίες εν κινήσει — αλλά το OT απαιτεί έναν κεντρικό διακομιστή για να αποφασίσει για κάθε αλλαγή. Τα σύγχρονα συστήματα όπως το Yjs χρησιμοποιούν Conflict-free Replicated Data Types (CRDTs): ένα μαθηματικό πλαίσιο όπου οποιαδήποτε δύο αντίγραφα μπορούν να συγχωνευθούν με οποιαδήποτε σειρά και πάντα συγκλίνουν στο ίδιο αποτέλεσμα, χωρίς να χρειάζεται μια κεντρική αρχή να αποφασίσει ποιος "κερδίζει".

Τα CRDTs κάνουν την επεξεργασία χωρίς σύνδεση φυσική: οι χρήστες μπορούν να συνεχίσουν να επεξεργάζονται ακόμη και όταν είναι αποσυνδεδεμένοι, και οι αλλαγές τους συγχωνεύονται καθαρά όταν επανασυνδέονται. Αυτός είναι ο λόγος που οι συνεργατικοί επεξεργαστές κώδικα που βασίζονται σε CRDTs φαίνονται άμεσοι — οι επεξεργασίες εφαρμόζονται τοπικά πρώτα και συγχρονίζονται με τους ομότιμους κόμβους αργότερα, αντί να περιμένουν για μια διαδρομή μετ' επιστροφής σε έναν διακομιστή πριν εμφανιστούν στην οθόνη.

Περιγραφή εργαλείου

Ο Συνεργατικός Επεξεργαστής Κώδικα είναι ένας επεξεργαστής κώδικα πολλαπλών παικτών σε πραγματικό χρόνο που τροφοδοτείται από το Yjs και το CodeMirror 6. Μοιραστείτε τη διεύθυνση URL του δωματίου με τους συναδέλφους σας και όλοι στο δωμάτιο επεξεργάζονται το ίδιο έγγραφο μαζί, με τον δείκτη κάθε ατόμου και την επιλογή να εμφανίζονται σε ένα επισημασμένο δείκτη.

Ο επεξεργαστής υποστηρίζει επισήμανση σύνταξης για δεκάδες γλώσσες προγραμματισμού, επιλέξιμες μέσω ενός κοινόχρηστου αναπτυσσόμενου μενού γλώσσας — η αλλαγή της γλώσσας σε ένα πρόγραμμα περιήγησης την ενημερώνει για όλους στο δωμάτιο αμέσως. Τα αρχεία μπορούν να φορτωθούν από τον τοπικό σας δίσκο με το κουμπί Άνοιγμα Αρχείου και να κατέβουν ξανά με το Αποθήκευση Αρχείου.

Χαρακτηριστικά

  • Δείκτες πολλαπλών χρηστών σε ζωντανή μετάδοση: Ο δείκτης και η επιλογή κάθε συνεργάτη εμφανίζονται με ένα χρωματικό κωδικό, επισημασμένο ετικέτα. πολλαπλοί δείκτες στην ίδια θέση συμπτύσσονται σε έναν μόνο δείκτη "N χρήστες" για να μειωθεί το οπτικό θόρυβο.
  • Κοινόχρηστη επιλογή γλώσσας: Η ενεργή γλώσσα προγραμματισμού παραμένει στο δωμάτιο, ώστε όλοι οι συμμετέχοντες να βλέπουν πάντα την ίδια επισήμανση σύνταξης, και οι όψιμοι συμμετέχοντες λαμβάνουν αμέσως τη σωστή κατάσταση.
  • Άνοιγμα και αποθήκευση αρχείων τοπικά: Φορτώστε οποιοδήποτε αρχείο πηγής από τον δίσκο απευθείας στον κοινόχρηστο επεξεργαστή ή κατεβάστε το τρέχον έγγραφο ως αρχείο με τη σωστή επέκταση.

Πώς λειτουργεί

Όταν συμμετέχετε σε ένα δωμάτιο, ο επεξεργαστής δημιουργεί ένα έγγραφο Yjs με έναν κοινόχρηστο κόμβο Y.Text που αντιπροσωπεύει το περιεχόμενο του αρχείου. Κάθε πληκτρολόγηση κωδικοποιείται ως μια συμπαγής δυαδική ενημέρωση Yjs, σειριοποιείται σε Base64 και μεταδίδεται μέσω ενός δωματίου WebSocket. Όλοι οι συνδεδεμένοι ομότιμοι κόμβοι εφαρμόζουν την ενημέρωση στο δικό τους αντίγραφο. λόγω της εγγύησης CRDT, όλα τα αντίγραφα συγκλίνουν στο ίδιο κείμενο ανεξάρτητα από τη σειρά άφιξης των ενημερώσεων.

Οι θέσεις δείκτη και επιλογής μοιράζονται μέσω ενός ελαφριού επιπέδου Awareness που δρομολογεί δεδομένα θέσης μέσω του ίδιου δωματίου WebSocket. Η πλήρης κατάσταση του εγγράφου αποσυντίθεται και γράφεται στον μόνιμο χώρο αποθήκευσης δωματίου κάθε δευτερόλεπτο, ώστε οι χρήστες που συμμετέχουν μετά την έναρξη της συνεδρίας να λαμβάνουν το τρέχον έγγραφο αμέσως.

Επιλογές που εξηγούνται

  • Αναπτυσσόμενο μενού γλώσσας — Επιλέγει τη γλώσσα επισήμανσης σύνταξης για τον επεξεργαστή. Η επιλογή μεταδίδεται σε όλα τα μέλη του δωματίου, ώστε όλοι να βλέπουν συνεπή επισήμανση. Το αναπτυσσόμενο μενού είναι απενεργοποιημένο έως ότου συνδεθείτε σε ένα δωμάτιο.
  • Άνοιγμα Αρχείου — Ανοίγει ένα τοπικό επιλογέα αρχείων και φορτώνει το περιεχόμενο κειμένου του επιλεγμένου αρχείου στο κοινόχρηστο έγγραφο Yjs, αντικαθιστώντας το τρέχον περιεχόμενο για όλους στο δωμάτιο.
  • Αποθήκευση Αρχείου — Κατεβάζει το τρέχον περιεχόμενο του επεξεργαστή ως αρχείο. Η επέκταση του αρχείου επιλέγεται αυτόματα με βάση τη γλώσσα που επιλέχθηκε.
  • Θέμα — Ο επεξεργαστής ακολουθεί την προτίμησή σας για σκοτεινό/ανοιχτό σύστημα (αποθηκευμένο σε localStorage). Αλλάξτε το θέμα του λειτουργικού συστήματος ή του προγράμματος περιήγησης για εναλλαγή μεταξύ των θεμάτων σκοτεινού και ανοιχτού επεξεργαστή με στυλ VS Code.

Περιορισμοί

  • Απαιτείται μια ενεργή σύνδεση WebSocket με τον διακομιστή αναμετάδοσης για συγχρονισμό. εάν η σύνδεση πέσει, οι επεξεργασίες που έγιναν χωρίς σύνδεση θα συγχρονιστούν αυτόματα κατά την επανασύνδεση.
  • Δεν υπάρχει ιστορικό μόνιμης έκδοσης — μόλις τελειώσει μια συνεδρία και κλείσει το δωμάτιο, το έγγραφο χάνεται εκτός αν το αποθηκεύσατε τοπικά με το κουμπί Αποθήκευση Αρχείου.
  • Δεν είναι δυνατή η φόρτωση δυαδικών αρχείων (εικόνες, μεταγλωττισμένα δυαδικά αρχεία κ.λπ.). ο επεξεργαστής λειτουργεί μόνο με αρχεία πηγής απλού κειμένου.
  • Αυτό το εργαλείο είναι σε beta. η σταθερότητα του δωματίου και ο μέγιστος αριθμός ταυτόχρονων χρηστών μπορεί να είναι περιορισμένος.

Συμβουλές

  • Μοιραστείτε τη πλήρη διεύθυνση URL του δωματίου από τη γραμμή διευθύνσεων του προγράμματος περιήγησής σας για να προσκαλέσετε συνεργάτες — το αναγνωριστικό δωματίου κωδικοποιείται στη διεύθυνση URL.
  • Αποθηκεύστε ένα τοπικό αντίγραφο με Αποθήκευση Αρχείου στο τέλος μιας συνεδρίας. τα δεδομένα δωματίου δεν είναι εγγυημένο ότι θα παραμείνουν επ' αόριστον.
  • Εάν η ετικέτα δείκτη ενός συνεργάτη καλύπτει σημαντικό κώδικα, η ετικέτα αναστρέφεται αυτόματα προς τα αριστερά όταν βρίσκεται κοντά στο δεξί άκρο του επεξεργαστή.